可能的重复:
Javascript:将一个值与多个值进行比较的最佳方式
Javascript If 语句用于检查文件扩展名不起作用
在 JS 中,我试图检查扩展名是否以“png”、“jpg”或“gif”结尾。我知道这可以用 switch 语句来完成,但我想知道是否有更简单的方法将它全部放入if
条件中。喜欢:
if (aExtensions[i].toLowerCase() == ('jpg' || 'png' || 'gif')) {}
实现这一目标的最佳方法是什么?
可能的重复:
Javascript:将一个值与多个值进行比较的最佳方式
Javascript If 语句用于检查文件扩展名不起作用
在 JS 中,我试图检查扩展名是否以“png”、“jpg”或“gif”结尾。我知道这可以用 switch 语句来完成,但我想知道是否有更简单的方法将它全部放入if
条件中。喜欢:
if (aExtensions[i].toLowerCase() == ('jpg' || 'png' || 'gif')) {}
实现这一目标的最佳方法是什么?
您可以使用这样的数组:
var extensions = ["jpg", "png", "gif"];
if (extensions.indexOf(aExtensions[i].toLowerCase()) > -1) {
// match
}
在这种情况下,您存储“有效”扩展名。然后,您可以使用 的indexOf
方法Array
来查找数组中的任何项目是否与您正在查看的特定扩展名相匹配 - 检查值是否0
大于或等于。
indexOf
旧浏览器不支持,因此您需要包含一个polyfill来备份它。有几种解决方案。
当然,如果你只想使用if
语句,你可以使用这种格式:
var ext = aExtensions[i].toLowerCase();
if (ext == "jpg" || ext == "png" || ext == "gif") {
// match
}
我能想到的另一种可能性是一个switch
声明,例如:
var ext = aExtensions[i].toLowerCase();
switch (ext) {
case "jpg":
case "png":
case "gif":
// match
break;
case default:
// No match
}
我不妨包括它(其他答案肯定是先有的),但我能想到的另一个是使用正则表达式,例如:
if (/jpg|png|gif/i.test(aExtensions[i])) {
// match
}
但请注意,您将永远无法单独取回扩展,这就是为什么我更喜欢我提供的前两个选项之一。
正则表达式呢?
if ( /jpg|png|gif/i.test( aExtensions[i] ) ) {
...
}
另一种方法是使用这样的对象文字,
if ({'jpg':1,'png':1,'gif':1}[aExtensions[i].toLowerCase()]) {
// ...
}
通过这种方式,您可以查看匿名对象{'jpg':1,'png':1,'gif':1}
是否具有由if
. 1
满足这个,undefined
没有。
如果您正在使用一个对象,您还可以使用in
运算符(如Ian所指出的),它给出true
对象是否具有与其值无关的键。
if (aExtensions[i].toLowerCase() in {'jpg':0,'png':1,'gif':2}) {
// ...
}
请注意这一次如何'jpg'
仍然过去了'jpg':0
。
您可以使用变量和三重比较,但这很难看。
或者您可以只使用一个数组并检查字符串是否包含在其中。
if (~ ["jpg", "png", "gif"].indexOf(aExtensions[i].toLowerCase()) …
然而,对于复杂的!= -1
比较和indexOf
旧 IE 中缺乏本机,人们倾向于使用正则表达式:
if (/jpg|png|gif/i.test(aExtensions[i])) …