在' if'内部进行变量分配JavaScript中的条件

时间:2014-04-08 12:35:25

标签: javascript operators

以下代码如何执行?

if(a=2 && (b=8))
{
    console.log(a)
}

输出

a=8

6 个答案:

答案 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)

您正在设置(不比较)a2 && (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 = 8b变为8并返回8
    • 8已退回
  • 评估
  • a = 8a变为8并返回8

最后,if子句针对8进行了测试。

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