При программировании на JavaScript иногда требуется создать копию массива. Но особенность заключается в том, что в JavaScript массив является объектом, поэтому при использовании оператора присваивания, новой копии создаваться не будет, а просто будет создана ссылка на существующий массив. Если после этого попробовать внести какие-нибудь изменения в любой из этих массивов, то изменения будут внесены сразу в оба. Так получается, потому что фактически это один и тот же объект. Например:
// Как хочется сделать, но не получится
var old_array = ['one', 'two', 'three'];
var new_array = old_array;
// Добавляем по одному элементу в исходный и "новый" массив
old_array.push('banana');
new_array.push('lemon');
// Получается вот что
// old_array = ['one', 'two', 'three', 'banana', 'lemon'];
// new_array = ['one', 'two', 'three', 'banana', 'lemon'];
Как видите, несмотря на то, что мы пытались добавить элементы в разные массивы (как нам казалось), они добавились в оба. Чтобы создавать не ссылку, а копию, можно воспользоваться хитрым трюком с методом slice. В этом случае будет создана именно копия массива.
// Корректный вариант решения
var old_array = ['one', 'two', 'three'];
var new_array = old_array.slice();
// Добавляем по одному элементу в исходный и новый массив
old_array.push('banana');
new_array.push('lemon');
// Теперь все правильно
// old_array = ['one', 'two', 'three', 'banana'];
// new_array = ['one', 'two', 'three', 'lemon'];
Надеюсь, что этот совет вам где-нибудь пригодится и поможет избежать хитрых ошибок, которые достаточно сложно отловить.