在JavaScript中的“if”条件中进行variables赋值
下面的代码是如何执行的?
if(a=2 && (b=8)) { console.log(a) }
OUTPUT
a=8
它与if语句无关,但是:
if(a=2 && (b=8))
这里最后一个(b=8)实际上返回8,因为赋值总是返回赋值,所以它和写
a = 2 && 8;
2 && 8返回8 ,因为2是真,所以和写a = 8 。
像这样的if语句中进行variables赋值通常是一个糟糕的主意。 但是,在这个特定的情况下,你基本上是这样做的:
if(a = (2 && (b = 8)));
(b = 8)部分返回8 ,所以我们可以将其重写为:
if(a = (2 && 8))
&&操作符返回右边的值,如果左边被认为是真的,所以2 && 8返回8 ,所以我们可以重写为:
if(a = 8)
它被称为运算符优先级
(a=2 && (b=8))
在上面的例子中 。 然后根据主&&符号评估结果。
(a=2 && (b=8)) evaluated to a = 2 && 8
所以2 && 8返回a = 8
你正在设置(而不是比较) a到2 && (b=8) 。 因为2是a = true && (b = 8) ,所以expression式的后半部分将被执行,即a = true && (b = 8) ,即a = (b = 8) ,即a = 8 。
你的陈述被解释为
a = (2 && (b=8))
当你使用&&语句时,最后的真实语句值将被返回。 这里(b = 8)将变成值8 ,这是真实的和最后的陈述。
要了解正在发生的事情,请参阅运算符优先级和关联性图表 。 expression式a = 2 && (b = 8)的评估如下:
-
&&操作符在=之前被评估,因为它具有更高的优先级- 评估左手expression式
2是真实的 - 评估右边expression式
b = 8(b变成8并且返回8) -
8返回
- 评估左手expression式
- 评估
a = 8(a变成8和8返回)
最后, if语句被testing了8 。
请注意,在这个例子中2不起任何作用。 但是,如果我们使用一些虚假的价值,那么结果将是完全不同的。 在这种情况下, a将包含这个虚假值,而b将保持不变。