为什么JavaScript逗号运算符在与函数应用程序一起使用时需要括号?

muf*_*fel 0 javascript

我可以在JavaScript中使用逗号运算符来评估多个表达式并返回最后一个表达式.

x = "foo", "bar"; // "bar"
y = 0, 21, 42; // 42
Run Code Online (Sandbox Code Playgroud)

但是,如果涉及函数应用程序,为什么括号必不可少?

arr = [1,2,3];
z1 = (arr.push(4), arr); // [1,2,3,4]
z2 = arr.push(5), arr; // 5 ??
Run Code Online (Sandbox Code Playgroud)

为什么最后一个语句将z2设置为5而不是arr?这与前一个正确设置z1的语句有什么不同?

Jam*_*lly 7

作为您链接的资源状态:

逗号运算符计算其每个操作数(从左到右)并返回最后一个操作数的值.

从左到右,这是你的结构:

  1. z2 = arr.push(5)
  2. arr

由于缺少括号,z2 = arr.push(5)是一个单独的语句arr并首先执行,然后arr执行(并返回).z2等于5,但整条线的回报是[1,2,3,4,5].以下是输入JavaScript控制台的代码的屏幕截图:

例

z1等于[1,2,3,4]因为括号.arr.push(4)执行,然后arr执行并返回到z1变量.

  • 另一个来自OP的例子 - 当`y = 0,21,42;`在控制台上评估为'42`时,`y`实际上是'0'. (2认同)