@wufapexef

Почему после присваивания значения переменной другой переменной, меняется массив первой переменной?

let aaa = [1,2,3]
      let bbb = aaa 
      bbb.push(4)
      console.log(aaa) // [1,2,3,4]


Почему так происходит? Как добавить без изменения первого массива?
  • Вопрос задан
  • 374 просмотра
Решения вопроса 3
Stalker_RED
@Stalker_RED
Потому что обе переменные (aaa и bbb) ссылаются на один и тот-же объект.

Можно сделать так:
let aaa = [1,2,3]
let bbb = [...aaa ] // не обязательно через spread, можно чем угодно, что делает копию. slice, например.
bbb.push(4)

console.log(aaa) // [1,2,3]
console.log(bbb) // [1,2,3,4]
https://jsfiddle.net/s716xeq9/
Ответ написан
Комментировать
@UNy
Присваивается не сам массив , а ссылка на него т.е aaa и bbb используют ссылку на 1 массив , чтобы этого избежать можно использовать полное копирование метод slice:
let bbb = aaa.slice();
Ответ написан
Комментировать
@daniil14056
Все что не является числом, символом или строкой, является лишь указателем на область памяти, от куда начинается этот Обьект,
Массив же как обьект у тебя это указатель к примеру он равен
let aaa = [1,2,3] //  aaa на самом деле на низком уровне равно
 //к примеру 0x8e118e8e - это адрес в памяти где будет хранится 
1(первый элемент массива), это указатель на первый элемент. 
Тогда 2 будет(тип Int = 4 байта) =0x8e118e8e+4 = 0x8e118e91.

А массивы в js еще и динамические как и типы данных!
Если нужно скопировать, то нужно скопировать все его значения, которые не являются объектами.
Использую [].slise(); можешь создать пустой массив, и через for( ... ) заполнить его пройдясь по элементам.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы