@sintez007
начинающий кодер

Почему в консоль выводятся элементы, которые ещё не добавлены?

let names = {
'group1': ['name1', 'name2']
}

console.log(names);

names.group1.push('name3')
names.group1.push('name4')

console.log(names);

Вопрос, почему первый вывод в консоль отображает элементы name3 и name4, которые добавляются только в дальнейшем. Хотя длина массива указана верно...
661664e05c0d9368245868.png
  • Вопрос задан
  • 102 просмотра
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Браузерная консоль показывает содержимое объектов в том виде, в котором они находятся в данный момент, а не в момент логирования - такая вот у неё особенность в целях экономии памяти. Обратите внимание, что на вашем скриншоте изначально написано, что в массиве два элемента, как это было на момент логирования, а вот при разворачивании показывается уже текущее состояние.
Чтобы этого избежать, приходится делать так:
console.log({...names});

Но, если в объекте находятся другие объекты (как у вас) и они изменяются тоже, то простое копирование не поможет.
Поэтому используют вот такую конструкцию:
console.log(JSON.parse(JSON.stringify(data)));
Есть и другие способы сделать глубокую копию объекта, но я для этих целей предпочитаю такой.
6616669cb48f8316007497.png
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы