带括号和逗号的不熟悉的变量赋值

时间:2014-11-30 19:12:42

标签: javascript

为什么用这样的括号赋值只计算最后一个值

 var a = (1, 2, 5 - 1); //4

它似乎也需要括号

var a = 1, 5 - 1; //SyntaxError: Unexpected number

1 个答案:

答案 0 :(得分:11)

,符号在JavaScript语法中有几个相似但明显不同的角色。在var声明中,逗号分隔变量声明子句。但是,在表达式中,逗号"运算符"提供了一种方法,以语法上等同于单个表达式的形式将几个表达式组合在一起。这在某些极少数情况下有点用处。

因此,括号在这里有所不同,因为没有它们,解析器期望每个逗号分隔的子句是变量声明和(可选)初始化。使用括号,初始化的右侧是语法上的单个表达式,即使它是由逗号运算符连接的三个单独的不相关表达式。

当存在涉及允许单个表达式的语法的情况时,表达式中的逗号运算符可以说是有用的,但是您确实想要使用多个表达式。最好的例子是for循环头中的第三个子句。如果你需要递增两个单独的变量,那么它(可能)更清楚地在循环头中做到这一点;但是,只提供一个表达式。因此,逗号运算符可以让你作弊:

for (var a = 0, b = 1; a < limit; a++, b = something(b)) {
  // ...
}

请注意,for标题的 first 子句中的逗号是而不是逗号运算符;它是用于分隔变量声明子句的逗号。 (我想有些人可能仍会使用术语&#34;逗号运算符&#34;为此,但我的观点是它没有分离表达式列表。)