JS中如何从JSON值创建新对象且不修改原父对象?
JS对象拷贝:避免修改原对象的方法
你遇到的问题是JS对象的引用类型特性导致的——直接赋值const newChild = parent.child并没有创建新对象,只是把原对象的引用赋值给了newChild,所以修改newChild的属性会同步影响原对象。new Object()没用是因为它无法实现值层面的对象拷贝,只是基于原对象创建了原型关联的新对象,或者你可能用法有误。
以下是几种靠谱的解决方案:
浅拷贝(适合单层对象,比如你的示例场景)
- 对象展开语法(最简洁直观):
const parent = { "child": {"value": 12}, "otherChild": {"value": 83} } const newChild = {...parent.child}; newChild.value = 25; console.log(parent.child.value); // 输出12,原对象不受影响
Object.assign()方法:
const newChild = Object.assign({}, parent.child); newChild.value = 25; console.log(parent.child.value); // 输出12
深拷贝(适合多层嵌套对象)
如果你的对象存在多层嵌套结构(比如child内部还有子对象),浅拷贝会失效,这时候可以用JSON序列化的方式实现深拷贝:
const newChild = JSON.parse(JSON.stringify(parent.child)); newChild.value = 25; console.log(parent.child.value); // 输出12
注意:这种方法无法拷贝函数、Symbol类型、undefined等特殊值,如果涉及这些场景,需要自定义深拷贝函数或使用成熟的工具方法。
内容的提问来源于stack exchange,提问作者Oliver L
相关产品推荐
相关产品推荐

