使用带有OR的IF语句的更好方法

时间:2013-06-01 15:03:27

标签: javascript jquery performance if-statement

我有这个if语句,我想知道是否存在更好的写作方式

if(i == "502" || i == "562" || i == "584" || i == "482" || i == "392"){
   //Some Stuff here
}

5 个答案:

答案 0 :(得分:5)

工作正常。您也可以使用Array.indexOf

if(['502', '562', '584', '482', '392'].indexOf(i) !== -1)
{
    /*Do Stuff*/
}

但是,您应该对Array.indexOf小心,因为IE9之前的Internet Explorer版本不支持它:(。这就是为什么$.inArray通常建议Array.indexOf

答案 1 :(得分:3)

使用jQuery的$.inArray()方法:

var a = ['502', '562', '584', '482', '392'];
var i = '482';

if ($.inArray(i, a) > -1) {
    alert(i);
}

参考文献:

答案 2 :(得分:3)

switch(i)
{
   case 502:
   case 562:
   case 584:
   case 482:
   case 392: //do stuff
            break;
}

答案 3 :(得分:1)

对象查找与变量查找一样快。

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 === 502i === '502',因为 Objects 中的所有键都是字符串

答案 4 :(得分:1)

虽然其他答案非常有用,但它们与您的代码完全不同。如果比较只有数字的字符串将比较相等(使用==)与它所代表的数字(以及可能等于toString()的其他对象)。但indexOf$.inArrayswitch

并非如此
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
}