19

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?

1

3 Answers 3

10

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"}

Sign up to request clarification or add additional context in comments.

Comments

4

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

0

obj being an object is added by reference in the array so your actually adding the same obj twice.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.