我在摸索着理解这个非常简化的语句。当搜索答案时,我发现的所有答案都与三元操作符有关。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