3

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

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

5 回答 5

5

这很好用。您也可以使用Array.indexOf

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

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

于 2013-06-01T15:07:18.457 回答
3

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

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

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

参考:

于 2013-06-01T15:06:15.460 回答
3
switch(i)
{
   case 502:
   case 562:
   case 584:
   case 482:
   case 392: //do stuff
            break;
}
于 2013-06-01T15:07:27.633 回答
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 === 502和因为Objectsi === '502'中的所有键都是Strings

于 2013-06-01T15:26:09.543 回答
1

虽然其他答案非常有用,但它们与您的代码并不完全相同。如果您比较仅包含数字的字符串,则将等于(使用==)与它表示的数字(以及可能具有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
}
于 2013-06-01T15:29:16.417 回答