const girl = {
name: 'Anna',
info: { age: 20, number: 123 }
};
const newGirl = { ...girl };
newGirl.info.age = 30;
console.log(girl.info.age, newGirl.info.age);
输出为 30 30,我们使用展开运算符将 girl 对象的属性复制到 newGirl 对象中。此运算符创建对象的浅表副本。浅拷贝不能避免突变。
让我们看另一个例子
function test(obj) {
const output = { ...obj };
output.age = 30;
return output;
}
let person = { age: 10 }
let newPerson = test(person);
console.log(newPerson.age, person.age); // output is 30 10
如您所见,第二个示例也使用展开运算符来创建对象的副本。为什么它的行为与第一个示例不同?为什么它不影响原始对象字段数据?
千万里不及你
料青山看我应如是
呼如林
相关分类