[英]Javascript simplified if-statement
我正在努力理解這個非常簡化的if語句。 當尋找答案時,我發現的只是與三元運算符有關的答案。
無論如何。 為什么下面的第一種情況有效,而后者拋出ReferenceError
呢? 只是想了解事物是如何工作的。
true && alert("test")
var x; true && x = 10;
這與運算符優先級有關 。 由於&&
操作是在=
之前計算的,因此第二個示例將毫無意義: (true && x) = 10;
為了使第二種情況起作用,請通過以下方式添加括號:
var x; true && (x = 10);
與&&
賦值運算符相比,Java似乎給&&
賦予了更高的優先級。 您給出的第二行解析為:
(true && x) = 10;
如果在作業周圍加上括號,我認為您會看到預期的行為:
true && (x = 10); // Sets x to 10 and the whole expression evaluates to 10.
萬一您需要一個關於為什么&&
可以用作if語句的指針,短語“短路評估”可能會有所幫助。
這是運算符的優先級 。
如您所見, &&
優先級高於=
所以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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.