来自 mdn:传播语法
注意:通常 ES2015 中的扩展运算符在复制数组时会深一层。因此,它们不适合复制多维数组。这与 Object.assign() 和 Object spread 语法的情况相同。请查看下面的示例以获得更好的理解。
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 解释的那样,仅复制数组的第一级,因此内存中的对象对于任何进一步的嵌套元素都保持不变。
我也错误地怀疑使用扩展语法的行为应该与切片运算符有任何不同