为什么下面代码末尾b
不等于?null
var a = { property: "value" },
b = a;
console.log(a === b); // true
a = null;
console.log(b); // Object { property: "value" }
我认为a
andb
是绑定到一个对象的两个引用,因此都将成为null
.
为什么下面代码末尾b
不等于?null
var a = { property: "value" },
b = a;
console.log(a === b); // true
a = null;
console.log(b); // Object { property: "value" }
我认为a
andb
是绑定到一个对象的两个引用,因此都将成为null
.
在行中:
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 的字符串更改为具有 value"value"
的整数5
。
这保留a
了对包含您最初创建的对象的内存块的引用,您还将 'b' 设置为指向下一行。
编辑:以上是为了回答你之前的问题。如果设置a
为 null,它只会删除它对原始对象的引用。b
当任何东西(在这种情况下)仍然具有对它的引用时,该对象不会被垃圾收集。创建后b
,引用是独立的,但都恰好指向同一个内存块。