为什么在以下代码的末尾b
is not equal到null
?
var a = { property: "value" },
b = a;
console.log(a === b); // true
a = null;
console.log(b); // Object { property: "value" }
我认为a
和b
是绑定到一个对象的两个引用,因此都会成为null
。
答案 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
后,引用是独立的,但两者都恰好指向同一块内存。