2016-08-25 100 views
1

我在摸索着理解這個非常簡化的語句。當搜索答案時,我發現的所有答案都與三元操作符有關。Javascript簡化if語句

無論如何。爲什麼下面的第一種情況會起作用,而後者會拋出ReferenceError?試圖瞭解事情的工作方式。

true && alert("test")

var x; 
 
true && x = 10;

+4

'='你正在做的分配不是一個比較 – Weedoze

+5

我認爲它需要這樣的'真&&(X = 10);'防止錯誤否則解釋爲:'(true && x)= 10' – Titus

+1

可能是某種東西,按照它的順序解釋。 可能是這樣的(不知道,只是在想): true && x = 10; (true && x)= 10; false = 10 - >錯誤 – Adrian

回答

4

Javascript似乎會賦予&&更高的優先級,而不是賦值運算符。

(true && x) = 10; 

如果添加分配左右括號,我想你會看到您所期望的行爲:

true && (x = 10); // Sets x to 10 and the whole expression evaluates to 10. 

而且萬一你需要爲你提供的第二行被解析關於爲什麼&&可用作if語句的指示器,短語「短路評估」可能有所幫助。

+2

它似乎並不僅僅給'&&'更高的優先級,事實上它確實賦予了該運算符更高的優先級:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/ Operators/Operator_Precedence – JLRishe

+0

@Rabbits:感謝您的短語。現在我知道該怎麼稱呼它了。 :) – stafffan

6

這與operator precedence做。由於&&操作在=前計算,你的第二個例子就是最終作出沒有意義的:(true && x) = 10;

對於你的第二個案件的工作,加上括號這樣:

var x; 
 
true && (x = 10);

3

它是一個Operator precedence

正如你可以看到&&具有更高的優先級比=

所以true && x = 10;實際上是(true && x) = 10;這顯然是錯誤的。您只能將值分配給變量,並且(true && x)要麼是false要麼值爲x

1

alert()的結果是未定義的。

var x; // x is now 'undefined' 
 
true && x; // true and undefined is undefined

第二個例子是關於運營商的優先級:那麼作爲第一個例子,可以重新輸入。運行時評估表達式爲(true & & x)= 10;

var x; 
 
true && (x = 10); // result will be 10