JavaScript中的引用相等行为

时间:2013-07-20 10:07:53

标签: javascript

var myObject = new Object();
var myObjectCopy = myObject;

myObject.Name = 'alav';

// logs Name alav on both variable
console.log(myObject, myObjectCopy);

myObject = null;

// logs only myObject as null and myObjectCopy still has name 'alav'
console.log(myObject, myObjectCopy);

为什么myObjectCopy在引用相等时不会变为null。

2 个答案:

答案 0 :(得分:2)

因为您要将myObject设置为引用nullmyObjectCopy仍将引用您创建的对象。例如:

var a = [0], b = a;
a = [3];
alert(b); //still 0, only a's reference has been changed

这是一个可视化:

在作业之前

old ----> {object} <---- new

old       {object} <---- new
 |
\_/
null

更改Name会更改两个对象,因为您正在更改上方可视化的{object}部分。

答案 1 :(得分:2)

将变量(或对象属性)设置为不同的值只会影响该变量,而不会影响先前引用的对象。可以把它想象成设置指向不同地址的指针。