在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

你正在设置(而不是比较) a2 && (b=8) 。 因为2a = 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 = 8b变成8并且返回8
    • 8返回
  • 评估a = 8a变成88返回)

最后, if语句被testing了8

请注意,在这个例子中2不起任何作用。 但是,如果我们使用一些虚假的价值,那么结果将是完全不同的。 在这种情况下, a将包含这个虚假值,而b将保持不变。