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

125*_*748 4 javascript

为什么使用这样的括号分配值仅计算到最后一个值

 var a = (1, 2, 5 - 1); //4
Run Code Online (Sandbox Code Playgroud)

它似乎也需要括号

var a = 1, 5 - 1; //SyntaxError: Unexpected number
Run Code Online (Sandbox Code Playgroud)

Poi*_*nty 11

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

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

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

for (var a = 0, b = 1; a < limit; a++, b = something(b)) {
  // ...
}
Run Code Online (Sandbox Code Playgroud)

请注意,标头的第一个子句中的逗号不是逗号运算符; 它是用于分隔变量声明子句的逗号.(我想有些人可能仍然会使用术语"逗号运算符",但我的观点是它没有分离表达式列表.)for