0

我想了解对象在 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' } }

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

4

2 回答 2

3

... spread syntax创建一个浅拷贝任何更深的东西,然后一级仍将作为对原始对象的引用

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

const clone = { ...obj };


console.log(obj === clone)

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

于 2019-09-30T16:01:24.390 回答
1

浅层克隆 如果传播到目标中的项目是一个对象,则只会复制对该对象的引用。扩展运算符不会递归地深度克隆属性。此外,只复制自己的、可枚举的属性。

这篇文章将有助于链接

于 2019-09-30T16:10:06.197 回答