Javascript如果声明有多个允许的条件
可能重复:
Javascript:将一个值与多个值进行比较的最好方法
Javascript如果语句用于检查文件扩展名无效
在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 }
在这种情况下,您将存储“有效的”扩展。 然后,您可以使用Array
的indexOf
方法来查找数组中的任何项是否与您正在查看的特定扩展名相匹配 – 检查0
或更大的值。
旧版浏览器不支持indexOf
,所以你需要包含一个polyfill来备份它…你可以看一下https://developer.mozilla.org/en-US/docs/JavaScript/Reference / Global_Objects / Array / indexOf#兼容性 ,但有几个解决scheme。
当然,如果你只想使用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 }
我可能还包括它(其他答案肯定是第一个),但我可以想到的另一个使用正则expression式,如:
if (/jpg|png|gif/i.test(aExtensions[i])) { // match }
但请注意,您将永远无法单独获得扩展名,这就是为什么我更喜欢前两个选项之一。
那么正则expression式呢?
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所指出的那样),如果对象有一个与它的值无关的键,则这个赋值为真。
if (aExtensions[i].toLowerCase() in {'jpg':0,'png':1,'gif':2}) { // ... }
注意这个时候'jpg'
仍然通过'jpg':0
。
你可以使用variables和三重比较,但这是丑陋的。
或者你可以只使用一个数组,并检查是否包含string。
if (~ ["jpg", "png", "gif"].indexOf(aExtensions[i].toLowerCase()) …
然而,对于复杂的!= -1
比较,以及在较老的IE中缺less本地indexOf
,人们倾向于使用正则expression式:
if (/jpg|png|gif/i.test(aExtensions[i])) …