2013-11-27 26 views
-2
if (event.keyCode === 38 || event.keyCode === 33 || event.keyCode === 40 || event.keyCode === 34) { 
} 

如何缩短这段代码?请记住,有条件的switch statements are slowJavascript速记如果

我要像做

if (event.keyCode === 38 || 33 || 40 || 34) 
+15

'请记住,有条件的开关语句慢'咦? – SLaks

+1

你想缩短它为什么?执行时间处理时间?字符数量?实际上你有什么问题? – jcsanyi

+3

是的,你能解释一下吗?我记得在某些情况下Mozilla的实现中导致'switch'比'if' /'else'慢的错误,但我不明白“条件'switch'语句慢”作为一般性陈述... –

回答

13

其实,我建议使用开关。所述general rule of thumb

  • 1或2的值:使用if
  • 3至10的值:使用一个开关
  • 11以上:使用一个阵列查找

但是,因为你使用jQuery,你可以简单地做:

jQuery.inArray(event.keyCode, [38,33,40,34]) 
+0

条件语句很慢。无论如何,你可以提供一个开关标记吗? –

+2

超,请阅读我提供的链接。它解决了关于什么是最快的问题。 – corsiKa

+0

对于这个问题中提到的案例'switch'没有什么好的方法。 –

7

使用纯JavaScript,你可以做这样的事情:

if ([38,33,40,34].indexOf(event.keyCode) >= 0) { ... } 

但请记住,这种方法是用的ECMAScript 5引入的,所以某些较旧的浏览器不支持。

你也可以做这样的事情,这应该工作在旧版浏览器,以及:

if ({38:1,33:1,40:1,34:1}[event.keyCode]) { ... } 
5

你可以使用对象查找。

if ({33:true,34:true,38:true,40:true}[event.keyCode]) { 
    ... 
} 
+1

谁投下了这个(现在-1)?谨慎留下解释?今天很多下调似乎都发生在整个网站上,我不得不复习一些完全有效的Q和As被标记为“低质量”的一些白痴。 –

+1

我可能会使用'1'而不是'true'来缩短它。 –

+0

@BlueSkies肯定,但由于重要的价值是数字,我希望他们与样板更加明显。 –

0

您可以使用正则表达式,但我不确定这是否必然比switch语句更快。

if (/^(38|33|40|34)$/.test(event.keyCode)) { 
// Some code here 
} 

虽然它比做对象属性查找更可读。

+0

正则表达式很慢,很抱歉,但只有必要时使用它们。 –

+1

啊,很好。固定。 – linstantnoodles

+1

我有一个问题,所以我使用正则表达式。现在我有两个问题。 – corsiKa