2017-01-16 48 views
1

在JavaScript中,是否可以在Or運算符之後放置條件語句?如果是這樣,爲什麼以下失敗?JavaScript中的Or運算符之後的條件語句

var value = 1 || true ? 2 : 3; // equals to 2 

當我將值設置爲等於[1 || true ? 2 : 3]時,我收到了意想不到的結果。 那得到的結果是:

value == 2 

我的預期值是等於1(value= = 1),自1 truthy,和Or語句應該具有回報1.條件語句,甚至不應該被執行。

val可以等於2(val == 2)的唯一方法是Or操作符的行爲與預期不符,並運行Or語句的第二部分以及其中的條件語句。

爲什麼表現如此?

+1

因爲它被解釋爲'(1 || true)? 2:3' – haim770

+0

哦..我忘記了運營商的優先權.. –

回答

3

我的預期值是等於1(值= 1),因爲1是truthy

爲了得到這一點,你需要的括號:

var value = 1 || (true ? 2 : 3); 
// --------------^------------^ 

沒有他們, ||介於1true之間,那麼條件運算符的第一個操作數就是其結果(即1)。

這是因爲||比條件運算符(just)具有更高的優先級; here's a table on MDN

0

因爲Logical OR優先於Conditional運營商。然後你的聲明實際上是解釋爲:

(1 || true) ? 2 : 3; 

這顯然計算結果爲2

請參閱MDN

+0

謝謝你們的快速反應(: –

相關問題