It’s important to note that in Javascript, when you set new variable to an existing array or object, the new variable will be a reference to the original array or object. So, if there are any changes to the original array or object, these will be reflected in the new variable.
var foo = [1, 2, 3]; var bar = foo; bar[1] = 5; alert(foo[1]); // alerts 5
For arrays, there’s an easy method to make a copy: use the slice
method.
var foo = [1, 2, 3]; var bar = foo.slice(0); bar[1] = 5; alert(foo[1]); // alerts 2
Coincidentally, you could set foo = []
after assigning bar = foo
, which would effectively create a new array and decouple foo from bar (in this case, foo
is now looking at a new memory address while bar
is looking at the old memory address of foo).
Copying an object is a little bit more involved. Javascript libraries such as jQuery and Backbone/Underscore have functions that can copy objects. Here’s a pure Javascript method:
Object.prototype.clone = function() { var newObj = (this instanceof Array) ? [] : {}; for (i in this) { if (i == 'clone') continue; if (this[i] && typeof this[i] == "object") { newObj[i] = this[i].clone(); } else newObj[i] = this[i] } return newObj; }; var foo = {a: 1, b: 2, c: 3}; var bar = foo; bar.b = 5; alert(foo.b); // alerts 5 var foo = {a: 1, b: 2, c: 3}; var bar = foo.clone(); bar.b = 5; alert(foo.b); // alerts 2