Javascript 如何使用扩展运算符更改对象的嵌套属性?

Javascript 如何使用扩展运算符更改对象的嵌套属性?,javascript,ecmascript-6,javascript-objects,Javascript,Ecmascript 6,Javascript Objects,这是我的情况的清晰版本: const person1 = { name: "Person1 Name", hairColor: "Brown", backpack: { color: "Army-Green", content: [ "item1", "item2", "..." ] } } 我只想改变背包的颜色 我已经尝试了下面的代码,但没

这是我的情况的清晰版本:

const person1 = {
    name: "Person1 Name",
    hairColor: "Brown",

    backpack: {
        color: "Army-Green",
        content: [
            "item1",
            "item2",
            "..."
        ]
    }
}
我只想改变背包的颜色

我已经尝试了下面的代码,但没有成功:

person = {...person1, backpack.color: "New backpack color"}};

person = {...person1, backpack: {...backpack, color: "New backpack color"}};

person = {...person1, backpack: {color: "New backpack color"}};

person = {...person1, backpack = {...backpack, color: "New backpack color"}};

你必须先把财产分散在下面

const person1={
姓名:“人名”,
发型颜色:“棕色”,
背包:{
颜色:“军绿”,
内容:[
“项目1”,
“项目2”,
"..."
]
}
}
const person={…person1,背包:{…person1.背包,颜色:“红色”}

console.log(person)
为什么不干脆
person1.backpack.color='New color'
?@SebastianKaczmarek,因为这也会改变
person1
啊,我明白了,你需要一个新对象,但属性已经改变了。然后,下面的答案展示了如何正确操作的示例。但是,请记住,“扩展”操作符只是对象的浅拷贝,这意味着嵌套对象不会被深度复制。相反,只复制对它们的引用,因此可能会出现这样的情况:您在父对象副本中更改此嵌套对象,
person1
person
都将受到此更改的影响。
const person2 = {...person1, backpack: {...person1.backpack, color: 'Red' }}