我在摸索着理解這個非常簡化的語句。當搜索答案時,我發現的所有答案都與三元操作符有關。Javascript簡化if語句
無論如何。爲什麼下面的第一種情況會起作用,而後者會拋出ReferenceError
?試圖瞭解事情的工作方式。
true && alert("test")
var x;
true && x = 10;
我在摸索着理解這個非常簡化的語句。當搜索答案時,我發現的所有答案都與三元操作符有關。Javascript簡化if語句
無論如何。爲什麼下面的第一種情況會起作用,而後者會拋出ReferenceError
?試圖瞭解事情的工作方式。
true && alert("test")
var x;
true && x = 10;
Javascript似乎會賦予&&
更高的優先級,而不是賦值運算符。
(true && x) = 10;
如果添加分配左右括號,我想你會看到您所期望的行爲:
true && (x = 10); // Sets x to 10 and the whole expression evaluates to 10.
而且萬一你需要爲你提供的第二行被解析關於爲什麼&&
可用作if語句的指示器,短語「短路評估」可能有所幫助。
這與operator precedence做。由於&&
操作在=
前計算,你的第二個例子就是最終作出沒有意義的:(true && x) = 10;
對於你的第二個案件的工作,加上括號這樣:
var x;
true && (x = 10);
它是一個Operator precedence。
正如你可以看到&&
具有更高的優先級比=
所以true && x = 10;
實際上是(true && x) = 10;
這顯然是錯誤的。您只能將值分配給變量,並且(true && x)
要麼是false
要麼值爲x
。
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
'='你正在做的分配不是一個比較 – Weedoze
我認爲它需要這樣的'真&&(X = 10);'防止錯誤否則解釋爲:'(true && x)= 10' – Titus
可能是某種東西,按照它的順序解釋。 可能是這樣的(不知道,只是在想): true && x = 10; (true && x)= 10; false = 10 - >錯誤 – Adrian