2016-06-01 2 views
-2

У меня есть следующий код, который копирует значение переменной, а затем меняет его значение.Javascript unbind variables

var a = [{name: 'John Doe'}]; 
 
var b = a; 
 

 
document.write(b[0].name + '<br />'); 
 
document.write(a[0].name + '<br /><br />'); 
 

 
b[0].name = 'Jane Doe'; 
 

 
document.write(b[0].name + '<br />'); 
 
document.write(a[0].name + '<br />');

Но как-то, что также изменить первое значение переменной

Как сделать переменную A, чтобы сохранить свое значение?

+1

Вы должны глубоко клонировать 'a', один из способов сделать это: var b = JSON.parse (JSON.stringify (a))' –

+0

Возможный обман: http://stackoverflow.com/questions/15722433/javascript-copy-array-to-new-array – Oisin

+0

Переменная a передается в b по ссылке. Поскольку a и b имеют одну и ту же ссылку, всякий раз, когда вы меняете что-либо на одном, оно также меняет другой. Чтобы предотвратить это, вам понадобится сделать глубокую копию a на b, скопировав все отдельные свойства. – nurdyguy

ответ

0

Вы только присваиваете a -очередь b. Вы можете захотеть сделать копию массива, чтобы изменения в a не отражались на b. См. this thread для разных назначений в JavaScript.

Взгляните также на fastest way to duplicate an array. Речь идет о скорости различных методов копирования массивов. Быстрый ответ:

var b = a.slice(); 

Метод slice() создает новый массив с теми же элементами, чем оригинал. Но будьте осторожны, это всего лишь shallow copy.

Вы также можете использовать методы JSON.stringify() и JSON.parse() для глубокой копии.