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?

Community
  • 1
  • 1
Kosmas Papadatos
  • 1,277
  • 2
  • 14
  • 32

3 Answers3

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

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Ben McCormick
  • 25,260
  • 12
  • 52
  • 71
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.

user1931858
  • 10,518
  • 1
  • 17
  • 6
0

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

Martijn Pieters
  • 1,048,767
  • 296
  • 4,058
  • 3,343
AlexandruSerban
  • 312
  • 2
  • 9