javascript - javascript 为什么/如何解释这个 "list"的裸数字?

标签 javascript node.js

由于我今天犯了一个拼写错误,我开始摆弄我的 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/

相关文章:

javascript - 根据在其他下拉框上完成的选择禁用下拉项

javascript - FullCalendar,可以设置 selectable false 但允许选择插槽

node.js - 如何从docker容器获取 Node 版本?

javascript - javascript 中的 await 关键字会降低应用程序的速度吗?

node.js - 有没有办法直接在 Jade 中包含 html 文件或片段?

android - React Native & Socket.io - 无法在应用程序和服务器之间建立连接

javascript - 在 NodeJS 中测试 promise

javascript - 如何使用 HTML5/phonegap 禁用 GPS

javascript - promise 和流量控制 : Early exit

javascript - 动态加载不安全的内容以避免对话