1

I feel puzzled when I rethink of these two functions:

The first one goes like this:

var test = [1,2,3];
var ele = test[0];
ele= 2;
alert(test[0]);

The result is 1. I think this is obvious. But when I meet this:

var test = [{id:1},{},{}];
var ele = test[0];
ele.id = 2;
alert(test[0].id);

The result turns to be 2
So could anyone tell me that how the javascript work when it happens like this in the object array?

1 Answer 1

2

In JavaScript, objects are assigned by reference, rather than copied in memory. So if you assign an existing object to a different variable, both will point to the same object in memory. Modifications to either will therefore be reflected in both.

var a = {id: 1, name: "bob"};
var b = a;
console.log(b.name); // bob
b.name = "bill";
console.log(a.name); // bill

So in your example, executing ele.id = 2; operates on the memory location holding the object at test[0]. The change to the id property of that object is reflected in both variables referencing it (test[0], ele)

Note that if you had assigned the entire array test to ele, modifying one of the array members would have been reflected in both test, ele since Arrays are objects in Javascript:

var test = [1,2,3];
// Assign array test to ele
var ele = test;
// Modify one member
ele[0] = 2;
alert(test[0]); // 2
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.