我有一个if语句,想知道是否存在更好的编写方法
if(i == "502" || i == "562" || i == "584" || i == "482" || i == "392"){
//Some Stuff here
}
我有一个if语句,想知道是否存在更好的编写方法
if(i == "502" || i == "562" || i == "584" || i == "482" || i == "392"){
//Some Stuff here
}
那很好。你也可以使用Array.indexOf
。if(['502', '562', '584', '482', '392'].indexOf(i) !== -1)
{
/*Do Stuff*/
}
然而,使用Array.indexOf
时需要小心,因为它在IE9之前的版本中不被支持 :(。这就是为什么人们经常建议使用$.inArray
而不是Array.indexOf
的原因。
通过jQuery使用$.inArray()
方法:
var a = ['502', '562', '584', '482', '392'];
var i = '482';
if ($.inArray(i, a) > -1) {
alert(i);
}
参考资料:
jQuery.inArray()
- jQuery API文档switch(i)
{
case 502:
case 562:
case 584:
case 482:
case 392: //do stuff
break;
}
对象查找速度与变量查找速度几乎相同。
if ({
"502": 1,
"562": 1,
"584": 1,
"482": 1, // if you're concerned about conflict with `Object.prototype`
"392": 1 // then consider using `{...}[i] === 1` or
}[i]) { // `{...}.hasOwnProperty(i)`
// code if found
}
i === 502
和i === '502'
,因为对象中的所有键都是字符串。i
恰好是一个与Object.prototype
上的方法同名的字符串,你就会得到错误的结果。再说一遍,这种情况相当少见,但我认为值得注意。使用.hasOwnProperty()
会更安全。 - user2437417constructor
、hasOwnProperty
、propertyIsEnumerable
、toLocaleString
、toString
和 valueOf
,以及 __define
和 __lookup
用于 Getter 和 Setter 的可能冲突。如果你知道你要查找的是一个字符串,就像在这个例子中一样,你就不必担心了,如果你想保持快速查找,你可以对设置的值进行 ===
测试(即这里将会是 {...}[i] === 1
)。 - Paul S.Object.prototype
上扩展带有真值数字的属性,或者更不可能的是像 Function.prototype.toString = function() { return 1; }
这样的情况... 是的,完全荒谬,不值得担心,但 技术上 可能。 :-) - user2437417Object.prototype
添加东西,除非是开玩笑,否则他们应该被禁止终身食用巧克力和饼干。_JavaScript_为此提供了原型和构造函数。 - Paul S.toString()
的其他对象)进行比较,它们将相等(使用==
)。但是,indexOf
、$.inArray
或switch
则不是这样的情况:var i = 502;
i == "502"' // True
["502"].indexOf(i) // False
var VALUES = ['502', '562', '584', '482', '392'];
if(VALUES.some(function(e) { return e == i; }) {
// do something
}
VALUES.some(compare)
,这将很好。 - user2437417VALUES.some(compare(i))
,其中compare
返回一个函数。也许改进一下函数名为compareTo
会更好... VALUES.some(compareTo(i))
。 - user2437417
==
比较,这可能会改变结果。例如,如果i
是502
而不是"502"
,你的结果将是true
,而其他人的结果将是false
。 - user2437417/^(?:502|562|584|482|392)$/.test(i)
,这将执行字符串强制转换。 :-) - Bergi