JavaScript объекты как свойство ссылки на объект - PullRequest
0 голосов
/ 30 сентября 2019

Я хочу понять, как объекты работают в 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' } }

Есть ли документация по этому поведению? Могу ли я рассчитывать на равенство ссылок на внутренние объекты при создании нового объекта с помощью оператора распространения?

Ответы [ 2 ]

2 голосов
/ 30 сентября 2019

... spread syntax создает неглубокую копию, которая глубже, чем уровень один, и останется ссылкой на исходный объект

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

const clone = { ...obj };


console.log(obj === clone)

console.log(obj.inner === clone.inner)
1 голос
/ 30 сентября 2019

Мелкое клонирование Если распространяемый в цель элемент является объектом, будет скопирована только ссылка на этот объект. Оператор распространения не будет рекурсивно глубоко клонировать свойства. Кроме того, копируются только собственные перечисляемые свойства.

Это сообщение поможет Ссылка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...