javascript es6 数组特性 [...data, 0] “扩展运算符”

IT技术 javascript ecmascript-6
2021-01-19 16:14:54

我在一些示例代码中遇到了这个,我完全迷失了。

const addCounter = (list) => {
    return [...list, 0];  // This is the bit I am lost on, and I don't know about [...list, 0]
}

显然上面的等价于下面的:

const addCounter = (list) => {
    return list.concat([0]);
}

非常感谢任何建议或解释。

2个回答

...list正在使用扩展语法来扩展 的元素list让我们假设列表是[1, 2, 3]因此[...list, 0]变成:

[1, 2, 3, 0]

这与做的结果相同 list.concat([0]);

这不是 ES6 中数组的特性,它只是用于数组连接。它还有其他用途。在 MDN 上阅读更多内容,或查看此问题

它不是运算符(也不能是运算符)。这只是语法。
2021-03-16 16:14:54
它不是concat,但在这种情况下它具有相同的结果。看到这个答案
2021-03-30 16:14:54
@ibrahimmahrir 好的,谢谢。我正在更新我的答案,称其为syntax甚至 Mozilla 也更新了他们的文档。
2021-04-02 16:14:54
我认为术语“语法”和“运算符”在这种情况下可以互换使用,至少只要语法被认为是语法糖抽象或隐藏在纯 JavaScript 中的一些复杂逻辑。但是,如果我们指的是 JavaScript 引擎将数组扩展为单个元素本机功能,我更愿意称其为“运算符”,因为它不再只是语法上的差异,即可能存在内部实现差异具有潜在的性能优势。
2021-04-03 16:14:54
所以基本上它是一个concat?
2021-04-09 16:14:54

...list spreads(布局)数组中的所有元素list

所以[...list, 0]是所有列表的具有0的元素的在端部