Possible Duplicate:
How do I correctly clone a JavaScript object?
I have this code:
var temp = [];
var obj = {name:"1"};
temp.push(obj);
obj.name = "2";
temp.push(obj);
What I'm expecting to be true:
temp[0].name == "1" && temp[1].name == "2";
What actually happens:
temp[0].name == "2" && temp[1].name == "2";
Why does this happen, and how I can get what I'm expecting?
-
... which is the solution to stackoverflow.com/questions/14417645/javascript-object-cloning/…Michael Berkowski– Michael Berkowski2013年01月23日 21:45:36 +00:00Commented Jan 23, 2013 at 21:45
3 Answers 3
JavaScript arrays hold references to objects, rather than objects themselves. When you push an object into the array it does not create a new object, but it simply puts a reference to the object, that obj
also points to, into the array.
So in the end obj, temp[0], and temp1 all point to the same object. To actually create a completely new object, you can use Object.create() or jQuery.extend({},obj). Though in your case it's easy enough just to create a new simple object using var newobj = {name="2"}
Comments
JavaScript objects are passed by reference. In your case you have only one object "obj", and temp[0] and temp[1] are pointing to the same object.
Comments
obj
being an object is added by reference in the array so your actually adding the same obj
twice.