Javascript 将IF语句与OR一起使用的更好方法
我有这个if语句,我想知道是否存在一个更好的方法来写它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(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
}