我在一些示例代码中遇到了这个问题,但我完全迷路了。
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正在使用传播语法传播的元素list。假设列表为[1, 2, 3]。因此[...list, 0]变为:
...list
list
[1, 2, 3]
[...list, 0]
[1, 2, 3, 0]
与执行结果相同 list.concat([0]);
list.concat([0]);
这不是ES6中数组的功能,它仅用于数组串联。它还有其他用途。阅读有关MDN的更多信息,或查看此问题。
所以基本上这是一个骗局?
它不是一个
concat
,但是在这种情况下它具有相同的结果。看到这个答案。它不是运算符(也不能是运算符)。这只是语法。
我认为,在这种情况下,术语“语法”和“运算符”可以互换使用,至少只要该语法被认为是语法糖抽象或在普通JavaScript中隐藏了一些复杂的逻辑即可。但是,如果我们指的是JavaScript引擎将数组扩展到其各个元素中的本机功能,则我更喜欢将其称为“运算符”,因为它不再仅仅是语法上的差异,即可能存在内部实现上的差异具有潜在的性能优势。
@ibrahimmahrir好,谢谢。我正在更新我的答案以称其为语法。甚至Mozilla也更新了他们的文档。