На этом шаге мы рассмотрим особенности копирования массивов.
Иногда требуется создать копию массива, чтобы сохранить исходные данные и предохранить их от последующих модификаций. Например, метод сортировки элементов массива, который рассмотрен ниже, изменяет исходный массив. Однако для копирования массива недостаточно присвоить его другой переменной. Используя новую переменную и оператор присваивания, мы создаем лишь новую ссылку на прежний массив, а не новый массив.
Проиллюстрируем это на следующем примере. Выполним такой скрипт:
<HTML> <HEAD> <SCRIPT LANGUAGE="JavaScript"> <!-- var a = new Array(5, 2, 4, 8); b = a; //Создаем новую ссылку на массив a. alert ("a[1] = "+a[1]); b[1] = 20; alert ("b[1] = "+b[1]+"\na[1] = "+a[1]); //--> </SCRIPT> </HEAD> <BODY> </BODY> </HTML>
Обратите внимание, что при изменении первого элемента массива b, изменился также первый элемент массива a, что свидетельствует о том, что b - это ссылка на a, то есть переменные b и a содержат адрес одной и той же области памяти.
Чтобы скопировать массив, то есть создать новый массив, элементы которого равны соответствующим элементам исходного, следует воспользоваться оператором цикла, в котором элементам нового массива присваиваются значения элементов исходного. Изменим последний скрипт следующим образом:
<HTML> <HEAD> <SCRIPT LANGUAGE="JavaScript"> <!-- var a = new Array(5, 2, 4, 8); b = new Array(); for (i=0;i<a.length;i++) b[i] = a[i]; alert ("a[1] = "+a[1]); b[1] = 20; alert ("b[1] = "+b[1]+"\na[1] = "+a[1]); //--> </SCRIPT> </HEAD> <BODY> </BODY> </HTML>
Обратите внимание, что при его выполнении, изменение первого элемента массива b не изменяет соответствующего элемента массива a, что свидетельствует о том, что это разные массивы.
На следующем шаге мы рассмотрим методы объекта Array.