javascript es6数组功能[…数据,0]“0”;“排列运算符”;

javascript es6数组功能[…数据,0]“0”;“排列运算符”;,javascript,ecmascript-6,Javascript,Ecmascript 6,我在一些示例代码中遇到了这个问题,我完全不知所措 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]); } 非常感谢您的任何建议或解

我在一些示例代码中遇到了这个问题,我完全不知所措

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]);
}

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

…列出
排列
列出数组中的所有元素
列表


因此,
[…list,0]
是list的所有元素,末尾有一个0

正在使用扩展
list
的元素。让我们假设列表是
[1,2,3]
。因此,
[…列表,0]
变为:

[1, 2, 3, 0]
与执行
list.concat([0])的结果相同


这不是ES6中数组的特性,它只是用于数组连接。它还有其他用途。阅读更多内容,或者看看。

那么基本上它是一个concat?它不是一个
concat
,但在这种情况下,它有相同的结果。请参阅。它不是运算符(也不能是运算符)。这只是语法。我认为“语法”和“运算符”这两个术语在这个例子中可以互换使用,至少在语法被认为是语法糖的情况下,可以在普通JavaScript中抽象或隐藏一些复杂的逻辑。但是,如果我们指的是JavaScript引擎将数组扩展到单个元素的本机功能,我更愿意将其称为“运算符”,因为它不再仅仅是语法上的差异,也就是说,可能存在具有潜在性能优势的内部实现差异。@ibrahimmahrir好的,谢谢。我正在更新我的答案,称之为语法。甚至Mozilla也更新了他们的文档。这能回答你的问题吗?