我有點困惑!爲什麼口供不會影響這些陳述的優先級?爲什麼括號不會在JavaScript中更改==和===的運算符優先級?
true === '0' == 0 // returns true
(true === '0') == 0 // returns true again!
我有點困惑!爲什麼口供不會影響這些陳述的優先級?爲什麼括號不會在JavaScript中更改==和===的運算符優先級?
true === '0' == 0 // returns true
(true === '0') == 0 // returns true again!
這不是優先級是不同的,這是兩個分組評價爲真:
true === '0'
是false
false == 0
是true
'0' == 0
是true
true === true
是true
你可能想要查看JS truth table
因爲(true === '0')
是假的,false == 0
在這兩種情況下都是這樣。
換句話說:
(true === '0') == 0
解析
false == 0
這是真的。
由於運營商===
和==
有same precedence是從左到右關聯。這兩個表達式導致相同的解釋。考慮以下表達式,爲什麼結果是它是什麼:
true === '0' // false
// so: true === '0' == 0 is false == 0 and;
// (true === '0') == 0 is (false) == 0 is false == 0 and;
false == 0 // true
快樂的編碼。
> true === '0'
false
> false == 0
true
因爲true === '0'
計算結果爲false
,並且false == 0
是真實的。 (因爲false
和0都是「非truthy」)
請記住,===
比較嚴格相等和==
測試是否與轉換相等。
(true === '0') == 0
這一個的計算結果爲:
false == 0 // which is true
因爲(真=== '0')爲假,並且假== 0爲真,並在這種情況下JavaScript是NT做了嚴格的類型比較,如果你希望它第二部分返回false變化===
因爲真正===「0」返回false和虛假== 0,則返回true
即使有paranthesis,你的第一個檢查總會返回false a nd
false == 0 will always return true
===將檢查值是否完全相同(類型包含)。所以,既然你把一個char和一個布爾值進行比較,結果總是是假的。
通過使用括號,您沒有改變執行順序。即使沒有括號,也是從左到右。左側部分true =='0'返回0.
0 == 0返回true,所以最終答案都是正確的。
但它*是*表達*是相同的* - 並吹掉這是一個很大的疏忽。考慮添加'true ===('0'== 0)'來顯示實際做某事的括號(這會產生第二種情況)。好的答案,否則。 – 2011-08-22 18:23:06