具有多个允许条件的Javascript if语句

时间:2012-12-19 01:22:03

标签: javascript

  

可能重复:
  Javascript: The prettiest way to compare one value against multiple values
  Javascript If statement used to check file extensions not working

在JS中,我试图检查扩展名是否以“png”“jpg”或“gif”结尾。我知道这可以通过switch语句完成,但我想知道是否有一种更简单的方法可以在if条件中抛出所有内容。像:

    if (aExtensions[i].toLowerCase() == ('jpg' || 'png' || 'gif')) {}

实现这一目标的最佳方式是什么?

4 个答案:

答案 0 :(得分:12)

你可以使用这样的数组:

var extensions = ["jpg", "png", "gif"];

if (extensions.indexOf(aExtensions[i].toLowerCase()) > -1) {
    // match
}

在这种情况下,您存储“有效”扩展名。然后,您可以使用indexOf Array方法查找数组中的任何项是否与您正在查看的特定扩展名相匹配 - 检查0indexOf的值大。

旧版浏览器不支持

if,因此您需要添加polyfill进行备份。有几种解决方案。

当然,如果您只想使用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
}

我不妨包括它(其他答案首先是肯定的),但我能想到的还有一个正则表达式,如:

{{1}}

但请注意,您永远无法单独获得延期,这就是为什么我更喜欢我给出的前两个选项之一。

答案 1 :(得分:3)

正则表达式怎么样?

if ( /jpg|png|gif/i.test( aExtensions[i] ) ) {
  ...
}

答案 2 :(得分:2)

另一种方法是使用像这样的对象文字

if ({'jpg':1,'png':1,'gif':1}[aExtensions[i].toLowerCase()]) {
    // ...
}

通过这种方式,您可以查看匿名对象{'jpg':1,'png':1,'gif':1}是否具有if所属的属性。 1符合此要求,undefined没有。


如果你正在使用一个对象,你也可以使用in operator(如Ian指出的那样),如果对象有一个与此无关的密钥,则true给出if (aExtensions[i].toLowerCase() in {'jpg':0,'png':1,'gif':2}) { // ... } 它的价值。

'jpg'

请注意,即使'jpg':0 {{1}},{{1}}仍然通过了{{1}}。

答案 3 :(得分:1)

你可以使用变量和三重比较,但这很难看。

或者您可以使用数组并检查字符串是否包含在其中。

if (~ ["jpg", "png", "gif"].indexOf(aExtensions[i].toLowerCase()) …

然而,对于复杂的!= -1比较以及旧IE中缺少原生indexOf,人们倾向于使用正则表达式:

if (/jpg|png|gif/i.test(aExtensions[i])) …