逗号在if语句中

时间:2014-02-05 17:25:06

标签: javascript

我在一些JavaScript中遇到了一个相当混乱的陈述:

if (n = "value", a==b) {...

我认为首先分配值n,然后执行比较(a==b)以确定是否继续if语句。但为什么?这样做有什么好处呢...

n = "value";
if (a==b) {...

...或

if (a==b) {n = "value"; ...

3 个答案:

答案 0 :(得分:3)

在JavaScript中,每当您在一对括号中放置多个表达式时,它们将被计算为最后一个表达式,如下例所示:

var a = (1, 2);
var b = a + 1;    // b = 2 + 1 = 3

因此,在您的情况下,解释程序执行归因n = "value",然后解析if a == b作为条件。它与:

相同
n = "value";
if (a == b) {
    // ...
}

This article解释了这种行为。

修改

但是,这不会将n限制为if的范围。同样的事情发生在for循环中的var声明:

for (var i = 0; i < 10; i++) {
    // Do stuff...
}
console.log(i);    // Logs 10

编辑2

正如Ethan Brown所提到的,关于变量提升也很好,这基本上就是说,在JavaScript中,可以在声明值之前将值分配给变量。以下代码显示了此行为,并从this MDN article中提取:

bla = 2
var bla;

// The above code is valid, since
// it's implicitly understood as:

var bla;
bla = 2;

功能也是如此:

foo();
function foo() {
    console.log('bar');
}

答案 1 :(得分:3)

您对意义的评估是正确的。除了紧凑性之外没有其他优点。许多人会考虑这种不良做法,但这并不会让我感到烦恼。

当你开始调用有副作用的函数时,它变得棘手...那么你可以做一些非常奇怪的事情。

答案 2 :(得分:1)

你是对的 - 这只是一个非常令人困惑的方式来分配变量然后运行if语句。它是有效的代码,但相当于不那么令人费解的版本,所以这很可能只是某个人太聪明的情况。