同一个对象并不总是一样的?

时间:2016-07-15 15:55:58

标签: javascript google-chrome comparison object-equality

为什么在以下代码的末尾b is not equalnull

var a = { property: "value" }, 
    b = a;
console.log(a === b); // true

a = null;
console.log(b); // Object { property: "value" }

我认为ab是绑定到一个对象的两个引用,因此都会成为null

1 个答案:

答案 0 :(得分:0)

在行中:

a = 5;

您将'a'指向包含值为5的整数的新内存块,覆盖它之前对您最初创建的对象的引用。试试这个:

var a = { property: "value" }, 
b = a;
console.log(a === b); // true

a.property = 5;
console.log(b); // Object {property: 5}

这样您就不会覆盖a,而是将密钥property指向的内存块从值为"value"的字符串更改为值为{{的整数1}}。

这会保留5对包含您最初创建的对象的内存块的引用,您还将“b”设置为指向下一行。

编辑:以上是回答您之前的问题。如果将a设置为null,则只删除它对原始对象的引用。任何事物(在这种情况下为a)仍然具有对它的引用时,不会对对象进行垃圾回收。创建b后,引用是独立的,但两者都恰好指向同一块内存。