Как указано в комментариях, JavaScript работает исключительно на ссылках, единственным исключением является то, что примитивные значения хранятся в стеке, и поэтому программа не требует ссылки для доступа к ним. В вашем примере все объявления переменных создают новые значения - каждый экземпляр массива - однако то, что возвращается из объявления массива, является ссылкой, а не самим массивом. Например, [1, 2]
- это массив значений (целые числа), но [a, b]
- это массив ссылок.
So ... ничего не скопировано. Мы можем продемонстрировать это, поместив объект в качестве элемента массива и проверив, что ранее назначенное свойство все еще доступно через новый «родительский» массив.
(И ответить на ваш вопрос в комментариях, да, ваш пример является более производительным, чем если бы вы (или JavaScript) должны были скопировать значения.)
'use strict';
const arrayOne = [];
arrayOne.someProperty = "This string is a property of `arrayOne`, " +
"accessed via the reference to it in `arrayTwo`."
const arrayTwo = [arrayOne];
span.innerHTML = arrayTwo[0].someProperty;
<span id="span"></span>
'a' и 'b' - ссылки на массивы, поэтому' new_ab' будет ссылкой на массив, содержащий эти ссылки. Никакие объекты не копируются вообще в коде, который вы отправили. – Pointy
Вы можете проверить это очень легко, изменив 'new_ab [0]' и посмотрев, что происходит с 'a'. – Blender
Итак, для использования вышеприведенного кода, так как это только ссылки? –