以下代码如何执行?
if(a=2 && (b=8))
{
console.log(a)
}
输出
a=8
答案 0 :(得分:43)
它与if
语句无关,但是:
if(a=2 && (b=8))
这里最后一个(b=8)
实际上返回8,因为赋值总是返回指定的值,所以它与写
a = 2 && 8;
并2 && 8
返回8
,因为2是真实的,所以它与写a = 8
相同。
答案 1 :(得分:19)
在if
语句中进行变量赋值通常是个坏主意。但是,在这种特殊情况下,您基本上是这样做的:
if(a = (2 && (b = 8)));
(b = 8)
部分返回8
,因此我们可以将其重写为:
if(a = (2 && 8))
如果左侧被视为true,则&&
运算符返回右侧的值,因此2 && 8
返回8
,因此我们可以重新重写为:
if(a = 8)
答案 2 :(得分:8)
它被称为运算符优先级
(a=2 && (b=8))
在上面的示例中。然后根据主要&&和登录。
(a=2 && (b=8)) evaluated to a = 2 && 8
所以 2&& 8 返回 a = 8
答案 3 :(得分:5)
您正在设置(不比较)a
与2 && (b=8)
。由于2
是tru-ish,表达式的后半部分将被执行,即a = true && (b = 8)
,即a = (b = 8)
,即a = 8
。
答案 4 :(得分:5)
您的陈述被解释为
a = (2 && (b=8))
当您使用&&
语句时,将返回最后一个真实语句值。这里(b = 8)将变为值8
,这是真实的,最后一个陈述。
答案 5 :(得分:4)
要了解发生了什么,请参阅operator precedence and associativity chart。表达式 a = 2 && (b = 8)
的计算方法如下:
&&
运算符在=
之前进行评估,因为它具有更高的优先级
2
,这是真实的b = 8
(b
变为8
并返回8
)8
已退回a = 8
(a
变为8
并返回8
)最后,if
子句针对8
进行了测试。
请注意,2
在此示例中不起任何作用。但是,如果我们使用一些假值,那么结果将完全不同。在这种情况下,a
将包含该假值,b
将保持不变。