Javascript简化if语句

时间:2016-08-25 07:45:35

标签: javascript if-statement

我正在试图理解这个非常简化的if语句。在搜索答案时,我发现的所有答案都与三元运算符有关。

反正。为什么下面的第一个案例起作用,而后者抛出ReferenceError?只是想了解事情是如何运作的。

true && alert("test")

var x;
true && x = 10;

4 个答案:

答案 0 :(得分:6)

这与operator precedence有关。由于&&操作是在=之前计算的,否则您的第二个示例最终会毫无意义:(true && x) = 10;

对于您的第二个案例,请以这种方式添加括号:



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




答案 1 :(得分:4)

Javascript似乎优先于&&而不是赋值运算符。您给出的第二行解析为:

(true && x) = 10;

如果在作业周围添加括号,我想你会看到你期望的行为:

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

如果你需要一个关于为什么&&可以用作if语句的指针,短语"短路评估"可能有所帮助。

答案 2 :(得分:3)

它是Operator precedence

正如您所看到的,&&的优先级高于=

所以true && x = 10;实际上是(true && x) = 10;,这显然是错误的。您只能为变量指定值,而(true && x)可以是false,也可以是x的值。

答案 3 :(得分: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