由于我今天犯了一个拼写错误,我开始摆弄我的 node
repl 并试图找出为什么在我的机器上 Chrome 和 Node (v6.9.2) 中都会发生这种情况。
> 1, 2, 3, 8
8
> a = 1, 2, 3, 8
8
> a
1
> (1, 2, 3, 8).toString()
'8'
JavaScript 引擎在这里看到/解析/做什么?我不禁对正在发生的事情感到困惑,并且希望能得到一些指导,告诉我可以去哪里了解更多信息。
最佳答案
这是逗号运算符,
这就是它的魔力。 <em>expr1</em>, <em>expr2</em>
将计算两个表达式,但仅返回后者。
如果<em>expr1</em>
没有副作用,那么逗号运算符实际上不是很有用,因为它在功能上与 <em>expr2</em>
相同。 :
var a = (2, 3); // 2 and 3 are both evaluated, but final result is 3; no side effects
var b = 3; // functionally equivalent to the above
当<em>expr1</em>
时会产生影响。有副作用,例如调用函数或更改变量:
var a = 0, b = 3;
var c = (++a, ++b); // ++a has the side effect of incrementing a
var d;
d = 5, 6; // (d = 5) has the side effect of setting d to 5
// now a = 1, b = 4, c = 4, d = 5
此功能很有用的一种情况是,当您有一个 for 循环,其中有两个要递增的同时变量时:
for(let i = 0, j = 5; i < 3; i++, j++) {
// `------´ comma expression, so both are incremented
console.log(i, j);
}
// prints:
// 0 5
// 1 6
// 2 7
另请注意,逗号运算符与语句分隔符 ;
不同。 ,因此以下内容不会按预期工作
关于javascript - javascript 为什么/如何解释这个 "list"的裸数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41069196/