Я пытаюсь понять точное поведение массивов в 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?
Когда вы let arr2 = arr1;
обе переменные передают ссылку на один и тот же фактический массив.
Однако, если вы переадресовываете одну из этих переменных в другой массив, они больше не используют одну и ту же ссылку и полностью изолированы друг от друга
Подумайте об этом так, переменная является указателем на объект в памяти, теперь:
arr1
) на объект [1,2,3]
[1,2,3]
, это то, что имеется в виду под ссылкой.[1,2,3]
последнее значение до 4
. В этот момент arr1
и arr2
все еще указывают на этот объект.arr1
NEW объект с содержимым [2,3,4]
. В этот момент arr2
указывает на старый объект [1,2,4]
.
arr1 = [2, 3, 4];
, новый массив[2, 3, 4]
создается и присваиваетсяarr1
. Этот новый массив больше не имеет ничего общего сarr2
или другим массивом.