在一個JS庫,我看到這樣的語法:我可以使用這種語法嗎?
if (val > 5 == t) { ... }
我在控制檯測試此:
1 == 1 == 2 // false
2 > 1 == 1 // true
1 == 2 == 1 // false
1 == 1 == 1 // true
1 < 2 < 3 // true
1 > 2 > 3 // false
乍一看正確的。這可以用嗎?
在一個JS庫,我看到這樣的語法:我可以使用這種語法嗎?
if (val > 5 == t) { ... }
我在控制檯測試此:
1 == 1 == 2 // false
2 > 1 == 1 // true
1 == 2 == 1 // false
1 == 1 == 1 // true
1 < 2 < 3 // true
1 > 2 > 3 // false
乍一看正確的。這可以用嗎?
1 == 1 == 2 // this
true == 2 // becomes this
1 == 2 // which becomes this, and is false
2 > 1 == 1 // this
true == 1 // becomes this
1 == 1 // which becomes this, and is true
...等等。
如果您對轉換有疑問,您應該搜索==
運算符,該運算符使用Abstract Equality Comparison Algorithm。
這是一個正確的語法,但不是我會推薦的。發生了什麼,可能是:
if ((val > 5) == t) { ... }
I tested this in console:
(1 == 1) == 2 // false
(2 > 1) == 1 // true
(1 == 2) == 1 // false
(1 == 1) == 1 // true
(1 < 2) < 3 // true
(1 > 2) > 3 // false
將左邊的布爾隱式轉換爲int。
你不是真的比較你認爲你是比較:
(1 == 1) == 2 // actually true == 2 which is false
(1 == 2) == 1 // actually false == 1 which is false
這就是爲什麼全等===
將在所有的情況下未能
沒有什麼可以從然而,使用這種冒險的語法阻止你請記住,在JavaScript代碼中存在錯誤的最常見原因之一是搞砸operator precedence。
因此,強烈建議通過向優先組添加括號來顯式定義優先級,以防其優先級明顯可確定的多個簡單數學表達式組成。
另一個問題是類型強制。
jslint
輸出:
Error: Problem at line 2 character 13: Expected '===' and instead saw '=='.
if (val > 5 == t) { }
'1> 2 <3 // TRUE' – Joe
'1 == 2 == 0'也是TRUE;。不建議使用 – duri
。這會降低代碼的可讀性。 –