来自MDN: 扩展语法(Spread Syntax)
注意:通常情况下,ES2015中的扩展运算符只会复制数组的一层。因此,它们不适用于复制多维数组。这也适用于Object.assign()和Object扩展语法。请参考下面的示例以更好地理解。
var a = [[1], [2], [3]];
var b = [...a];
b.shift().shift(); // 1
// Now array b is: [[2], [3]]
上述陈述的意义是什么?上面的代码示例与使用.slice()方法将数组a复制到b中完全相同。我尝试在这里向数组添加另一个维度:https://repl.it/HKOq/2,事情仍然按预期工作。 那么为什么展开语法不适用于复制多维数组呢?
感谢estus和vol7ron的答案帮助我弄清楚了问题。基本上,正如estus指出的那样,技术上只有数组内部的数组而不是多维数组。
并且正如vol7ron所解释的那样,只有数组的第一层被复制,因此对于任何进一步嵌套的元素,内存中的对象仍然保持不变。
我也错误地怀疑使用展开语法应该与slice运算符不同。
...
不是一个运算符! - Felix Kling...
是一个标点符号,用于rest和spread语法。 - RobG