Как ведут себя переменные с массивами в javascript?

1

Я пытаюсь понять точное поведение массивов в Javascript. Я знаю, что они работают по ссылке. Но я был смущен, когда наткнулся на этот фрагмент кода:

let arr1 = [1,2,3];

let arr2 = arr1;

arr1[2] = 4;

console.log(arr2); // [1,2,4]

arr1 = [2, 3, 4];

console.log(arr2); // [1,2,4] why not [2, 3, 4]

Итак, как именно массивы ведут себя в javascript?

  • 0
    Вопрос не в массивах, а в переменных. Когда вы пишете arr1 = [2, 3, 4]; , новый массив [2, 3, 4] создается и присваивается arr1 . Этот новый массив больше не имеет ничего общего с arr2 или другим массивом.
Теги:

2 ответа

2

Когда вы let arr2 = arr1; обе переменные передают ссылку на один и тот же фактический массив.

Однако, если вы переадресовываете одну из этих переменных в другой массив, они больше не используют одну и ту же ссылку и полностью изолированы друг от друга

  • 0
    Это связано с неизменностью природы?
  • 1
    Нет ... не имеет ничего общего с неизменностью. Просто изменение значения. Новое значение указывает на совершенно другой объект (массив)
Показать ещё 1 комментарий
2

Подумайте об этом так, переменная является указателем на объект в памяти, теперь:

  • Строка 1: Устанавливаемый указатель (arr1) на объект [1,2,3]
  • Строка 2: Назначение указателя для указателя, указывающего на объект [1,2,3], это то, что имеется в виду под ссылкой.
  • Строка 3: измененный объект [1,2,3] последнее значение до 4. В этот момент arr1 и arr2 все еще указывают на этот объект.
  • Строка 4: Определяет указатель arr1 NEW объект с содержимым [2,3,4]. В этот момент arr2 указывает на старый объект [1,2,4].

Ещё вопросы

Сообщество Overcoder
Наверх
Меню