11

可能重复:
Javascript:将一个值与多个值进行比较的最漂亮方法
Javascript If 语句用于检查文件扩展名不起作用

在 JS 中,我试图检查扩展名是否以“png”、“jpg”或“gif”结尾。我知道这可以通过 switch 语句来完成,但我想知道是否有更简单的方法可以将它全部放入if条件语句中。喜欢:

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

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

4

4 回答 4

13

你可以使用这样的数组:

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
}

但请注意,您将永远无法单独取回扩展,这就是为什么我更喜欢我给出的前两个选项之一。

于 2012-12-19T01:22:53.133 回答
3

正则表达式呢?

if ( /jpg|png|gif/i.test( aExtensions[i] ) ) {
  ...
}
于 2012-12-19T01:26:01.337 回答
2

另一种方法是使用这样的对象字面量,

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

于 2012-12-19T01:27:34.433 回答
1

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

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

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

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

if (/jpg|png|gif/i.test(aExtensions[i])) …
于 2012-12-19T01:26:40.767 回答