作为对象引用属性的JavaScript对象

我想了解对象在JS中的工作方式。

const obj = { inner: { a: 'Hello' } };

const clone = { ...obj };

// obj === clone -> false
// !!! BUT !!!
// obj.inner === clone.inner -> true

clone.inner = { a: 'world' };
// obj === { inner: { a: 'Hello' } }
// clone === { inner: { a: 'World' } }

是否有关于此行为的文档?通过扩散运算符创建新对象时,是否可以依赖内部对象引用相等?


解决方案

...spread syntax创建浅层副本,任何比级别1更深的内容仍将保留为对原始对象的引用

const obj = { inner: { a: 'Hello' } };

const clone = { ...obj };


console.log(obj === clone)

console.log(obj.inner === clone.inner)

相关文章