【发布时间】:2021-07-14 11:52:13
【问题描述】:
我对扩展运算符如何处理对象数组有点困惑。假设我有一个对象数组,例如:
const array = [
{ name: 'Object 1', body: '123'},
{ name: 'Object 2', body: '456'}];
如果我进行克隆并在克隆上使用拼接:
const cloneArray = [...array];
const newObject = { name: 'Object 3', body: '789'}
cloneArray.splice(1,1,newObject);
我将拥有:
const array = [
{ name: 'Object 1', body: '123'},
{ name: 'Object 2', body: '456'}];
const cloneArray = [
{ name: 'Object 1', body: '123'},
{ name: 'Object 3', body: '789'}];
仅修改克隆的数组。扩展运算符不应该对初始数组进行浅拷贝,并强迫我深度克隆所有对象? 我在这里错过了什么?
【问题讨论】:
-
这就是为什么开发人员使用
spread操作符来进行浅拷贝 -
当浅拷贝对象时(默认是赋值,或者像这里一样,传播引用数组),你总是只是复制引用。在这里,如果你做
cloneArray[0].name = 'coolNewValue';,它也会反映在array中。
标签: javascript arrays splice