【发布时间】:2018-12-12 08:00:29
【问题描述】:
我试图了解以下方法中扩展语法与切片方法之间的区别。
假设我想制作一个数组的实际副本,我可以使用扩展语法轻松地做到这一点
var fruits = ["Banana", "Chips" , "Orange", "Lemon", "Apple", "Mango"]
var newCitrus = [...fruits]
如果我控制台记录这个
["Banana", "Chips", "Orange", "Lemon", "Apple", "Mango"]
但我也可以使用 slice 方法创建数组的副本。考虑到上面相同的数组,如果我做这样的事情......
var citrus = fruits.slice(0);
然后在控制台记录它,它会给我通过扩展语法得到的完全相同的数组
["Banana", "Chips", "Orange", "Lemon", "Apple", "Mango"]
由于他们都需要大约相同的时间来编码/编写,这里有什么区别?我通常应该选择哪种方法?
【问题讨论】:
-
spread 运算符比 Firefox 中的 slice 大约 5% faster - spread 运算符比 Chrome 中的 slice 大约 60% SLOWER - 所以,你会使用传播运算符让人们相信 Chrome 比 Firefox 慢
-
slice允许更多地控制数组的哪一部分,而扩展运算符允许快速“粘贴”到数组中,例如["other", "elements", ...fruits]. -
@JaromandaX 我建议
[...arr].slice()满足所有用户 -
@Mark_M - 所以,不是
[].concat([...arr].slice()) -
@JaromandaX 实际上很重要。我见过有人问诸如“为什么我不能
var args = ...arguments;”之类的问题,答案是因为它不是运算符。
标签: javascript slice spread-syntax