2013-11-27 44 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