2015-05-01 11 views
5

在我能找到的所有JavaScript運算符優先級圖表(如this onethis one)中,邏輯與(&&)的略高於邏輯OR(||)的優先級。AND(&&)優先於OR(||)的重要性的表達式示例?

我似乎無法弄清楚表達式的結果是不同的,如果他們有相同的優先權。我認爲必須有某種方式才能解決問題,否則如果沒有,他們會被列爲具有相同的優先級。

例如:

0 || 2 && 0 || 3 

3,但沒關係我如何切,最多,它總是將是3

(0 || 2) && 0 || 3 

0 || (2 && 0) || 3 

(0 || 2 && 0) || 3 

0 || 2 && (0 || 3) 

0 || (2 && 0 || 3) 

如果我作出這樣的第一0東西其他(如4),結果總是4,因爲第一個||甚至沒有看到右側。如果我將03替換爲最後的||左右,結果仍爲3

我來最接近的是

0 || false && "" || NaN 

...這是NaN,而

0 || false && ("" || NaN) 

...是false,但我認爲這由左到純粹的解釋正確的語義,而不是&&更高的優先級。

我一定會錯過它,因爲什麼樣的表達方式會影響&&||更高的優先級?

+0

只是做一個猜測:作爲一個備用的可能? – maioman

+3

'true ||假&&假' –

回答

3

如果它們具有相同的優先級並且是左聯合的,則例如表達

1 || 0 && 2 

((1 || 0) && 2) // evaluates to 2 

代替

(1 || (0 && 2)) // evaluates to 1 

我們從 「正常」 優先級規則得到。


爲了您的結構… || … && … || …(這將是(((… || …) && …) || …),而不是正常的((… || (… && …)) || …)),你會得到不同的結果像0 0 1 0值。


爲什麼邏輯,並有略微更高的優先級與邏輯和?

因此,布爾表達式的規範形式disjunctive normal form不需要任何括號。

+0

我確信我試過了,但顯然不是!謝謝。 –

3
true || false && false 

true

(true || false) && false 

false

true || (false && false) 

true

+0

如果使用對象而不是布爾值,則很容易看出差異。例如,'{a:1} || {b:2} && {c:3} || {d:4} && {e:5}'給出'{a:1}',而'({a:1} || {b:2})&&({c:3} || {d:4 })&& {e:5}'給出{e:5}'。 – aroth

+0

@aroth:除了所有的物體都是真的。但使用(說)'1 || 0 &&「」'會使這個更清晰,因爲它是'1',但是(1 || 0)&&「」''是''「''。 –

1

實施例:

1 || 0 && 0 - >(1 || 0) && 0 - >(1) && 0 - >
1 || 0 && 0 - >1 || (0 && 0) - >1 || (0) - >