2016-12-03 54 views
4

我在腳本中有幾個if語句,它們需要很多條件,我希望以更高效的方式編寫它們,並使用「簡寫符號」來提高可讀性。Javascript - 如果聲明有幾個條件的簡寫符號

例如,我有這樣的if語句:

if (x === 'abc' || x === 'def' || x === 'ghi' || x ==='jkl') { 
    /*** some code ***/ 
} 

所以我在寫它的indexOf和數組,但我不知道這是否是最好的辦法:

if (['abc', 'def', 'ghi' ,'jkl'].indexOf(x) > -1) { 
    /*** some code ***/ 
} 

我肯定還有其他一些方法更清潔和最快...

+2

你看起來最棒。 – 4castle

+0

你也可以做一個'switch' –

+0

謝謝你的回答。在我的情況下,我不能用'abcd'來代替,它只是爲了這個例子。如果我使用/(a|b|c|d)/.test(x),它是更好還是相同? – freaky

回答

3

你的陣列是可讀且易於修改。如果您以後選擇這樣做,它還使您能夠將陣列作爲參數。

如果您使用ES6,您可能需要使用Array.prototype.includes

if (['abc', 'def', 'ghi', 'jkl'].includes(x)) { 
    /*** some code ***/ 
} 

在這種情況下,不必擔心性能會是一個過早的優化。

+0

感謝您的回答以及關於ES6'.include()'的有用提示。我一定會在以後使用它。 – freaky

0

這實在是一個可讀性問題。當你在五個月內閱讀相同的代碼時,什麼會最有意義?

x === 'a' || x === 'b' || x === 'c' || x ==='d' 

['a', 'b', 'c' ,'d'].indexOf(x) > -1 

我會用長「或」表情,因爲它很清楚明確地告訴你什麼代碼的作用。然而,我包裹該表達式在一個功能,使代碼更易讀的其餘部分

實施例:

isSpecialLetter = function (x){ 
    return x === 'a' || x === 'b' || x === 'c' || x ==='d'; 
} 

if(isSpecialLetter(x)){ 
//More code 
}