在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将保持不变。