2016-06-26 54 views
3

是否有一個具體的原因,我看到很多人寫的Javascript:操作數的比較運算順序

if(1 === a) {...} 

代替

if(a === 1) {...} 

我已經給出了其中我寫了類似的答案Array === obj.constructor這是有人問我,他經常看到人們這樣寫而不是obj.constructor === Array

那麼,我使用哪種方式真的很重要?

+0

可能是因爲'x === y' x首先被評估,如果x是NaN false按照規範ASAP返回http://www.ecma-international.org/ecma-262/6.0/ #sec-strict-equality-comparison – gurvinder372

+0

這是一種安慰劑的做法:人們相信它會解決他們最重要的發展問題。 – zerkms

回答

3

這是yoda conditions

尤達條件如此命名是因爲條件的字面意義是第一位的,而可變排第二。例如,下面是一個尤達條件:

if ("red" === color) { 
    // ... 
} 

這就是所謂的尤達條件,因爲它的內容,「紅色的顏色」,類似星球大戰人物尤達說話的方式。相較於安排操作數的另一種方式:

if (color === "red") { 
    // ... 
} 

這通常寫着,「顏色是紅色的」,這可以說是形容比較更自然的方式。

尤達條件的支持者強調,不可能錯誤地使用=而不是==,因爲你不能分配一個字面值。這樣做會導致語法錯誤,並會在早期通知您錯誤。因此,這種做法在早期的編程工具中尚不可用的情況下非常普遍。

尤達條件的反對者指出,工具使我們更好的程序員,因爲工具會捕獲錯誤地使用=而不是==(ESLint會爲你解決這個問題)。因此,他們認爲,模式的效用不會超過代碼在使用Yoda條件時需要的可讀性。

+1

有趣。這支部隊的力量很強。 – shinobi