Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将IF语句与OR一起使用的更好方法_Javascript_Jquery_Performance_If Statement - Fatal编程技术网

Javascript 将IF语句与OR一起使用的更好方法

Javascript 将IF语句与OR一起使用的更好方法,javascript,jquery,performance,if-statement,Javascript,Jquery,Performance,If Statement,我有这个if语句,我想知道是否存在一个更好的方法来写它 if(i == "502" || i == "562" || i == "584" || i == "482" || i == "392"){ //Some Stuff here } jQuery使用$.inArray()方法: var a = ['502', '562', '584', '482', '392']; var i = '482'; if ($.inArray(i, a) > -1) { alert(i

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

if(i == "502" || i == "562" || i == "584" || i == "482" || i == "392"){
   //Some Stuff here
}
jQuery使用
$.inArray()
方法:

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

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

参考资料:

  • -jQuery API文档

这很好用。你也可以使用

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

对象查找速度与变量查找速度相当

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'
,因为对象中的所有键都是字符串。

虽然其他答案非常有用,但它们的作用与您的代码不完全相同。如果您比较只有数字的字符串,则比较结果将相等(使用
=
)对于它所表示的数字(以及可能具有与之相等的
toString()
的其他对象)。但对于
indexOf
$,情况并非如此。inArray
开关

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
}

请注意,如果兼容性是一个主要问题,那么这非常好。如果您不必处理旧的IE,那么本机实现steaks建议更快。在一些旧的浏览器上(IE,我看着您…)原型数组没有indexOf()方法,那么您应该使用jquery方法:$.inArray()但这是一个很好的方法,谢谢你这么说。我现在正在修改我的帖子,以引出浏览器兼容性问题。@broading:在他链接的页面上有一个兼容性部分需要阅读(包括一个简单的解决方案)-没有理由反复重复:-)@Bergi你看到标记为“编辑”的小链接了吗您得到的答案是执行严格的平等比较。由于您正在进行
=
比较,因此可能会更改结果。例如,如果
i
502
而不是
“502”
,则您的将是
true
,而其他的将是
false
。然后尝试
/(:502 | 562 | 584 | 482 | 392)$/。测试(i)
,它也将执行字符串强制:-)尽管可能性不大,如果
i
恰好是与
Object.prototype
上的方法同名的字符串,则可能会出现误报。同样,可能性不大,但我认为这是值得注意的。使用
.hasOwnProperty()
会更安全。@CrazyTrain这是真的,
构造函数
hasOwnProperty
属性可枚举
toLocaleString
toString
的值
,以及Getter和Setter的
\u定义
\u查找
,都是可能的冲突。如果您知道您正在查找示例中的字符串,那么您不必担心,如果您想保持快速查找,您可以根据您设置的值进行
==
测试(例如,这里将是
{…}[i]==1
)+1用于更新!:-)D:如果有人在Object.prototype中添加了类似的东西,除非是开玩笑,否则应该禁止他们在余生中吃巧克力和饼干。JavaScript为您提供了这些东西的原型和构造函数。完全同意!因此出现了“极端边缘情况”,假设大多数人喜欢巧克力,而不喜欢有缺陷的JavaScript+1这是唯一真正准确的替代方案,尽管它没有缩短它,因为我猜这是最终需要的。但是,如果在多个位置执行此操作,您可以将函数命名为,只需执行
值。有些(比较)
,这会很好…哦,我上面的函数需要是
值。有些(比较(i))
比较
返回函数。也许一个改进的函数名应该是
compareTo
<代码>值。一些(与(i)相比)
var VALUES = ['502', '562', '584', '482', '392'];

if(VALUES.some(function(e) { return e == i; }) {
   // do something
}