Когда я оцениваю arr === otherArr
результат равен FALSE .
потому что срез не тот же массив.
по сути, это копия содержимого массивов.
Когда я делаю следующее, пытаясь изменить первое значение массива:
otherArr[0][1] = otherArr[0][1] + 5;
также изменяет исходный массив (обр)
arr[0][1] === otherArr[0][1]
оценивается как ИСТИНА
, но arr === otherArr
оценивается как FALSE
да, потому что массив является объектом, а не примитивным значением.
вы копируете все содержимое arr
в otherArr
но вы не создаете копии объектов, на которые оно ссылается.
если бы у вас были простые значения, такие как числа, строки, логическое значение и, возможно, даже регулярное выражение, вы могли бы быть уверены, что оно будет скопировано.
если вы обращаетесь к подмассиву, вам также необходимо сначала создать срез этого подмассива, если вам нужна фактическая копия.
потому что arr
просто указывает на массивы. он не содержит их. это ссылки.
пожалуйста, взгляните также на комментарий от Calvin Nunes ниже вашего вопроса:
вы можете создать глубокую копию, сначала преобразовав свой массив в строку json, а затем обратно в массив:
otherArr = JSON.parse(JSON.stringify(arr))
Имейте в виду, что это работает с простыми вещами, но если вы хотите скопировать объекты, которые содержат пользовательские функции и т. Д., Вы можете об этом забыть.
они не будут добавлены в представление json и будут потеряны.
json - это просто формат, предназначенный для транспортировки.
если в будущем вы столкнетесь с таким требованием, вы можете вместо этого рассмотреть возможность переписать свой код.
это всегда приводит к медленному коду.
вы можете вместо этого рекурсивно скопировать ваш массив.
например, проходя по массиву, если член относится к типу array, проходите по нему тоже.
хорошо .. есть различные решения для глубокого копирования. вам просто нужно за это погуглить.