Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JavaScript object pushed into an array [duplicate]

Tags:

javascript

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?

like image 444
Kosmas Papadatos Avatar asked Jan 23 '13 21:01

Kosmas Papadatos


2 Answers

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

like image 95
Ben McCormick Avatar answered Oct 22 '22 12:10

Ben McCormick


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.

like image 34
user1931858 Avatar answered Oct 22 '22 12:10

user1931858