同一个对象不总是一样的吗?
The same object is not always the same?
为什么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
。
行中:
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"
的字符串更改为具有值的整数5
.
这会保留 a
对包含您最初创建的对象的内存块的引用,您还在下一行中设置 'b' 指向该对象。
编辑:以上是回答你之前的问题。如果将 a
设置为 null,它只会删除它对原始对象的引用。当任何对象(在本例中为 b
)仍然引用它时,该对象将不会被垃圾回收。创建b
后,引用是独立的,但两者恰好指向同一块内存。
为什么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
。
行中:
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"
的字符串更改为具有值的整数5
.
这会保留 a
对包含您最初创建的对象的内存块的引用,您还在下一行中设置 'b' 指向该对象。
编辑:以上是回答你之前的问题。如果将 a
设置为 null,它只会删除它对原始对象的引用。当任何对象(在本例中为 b
)仍然引用它时,该对象将不会被垃圾回收。创建b
后,引用是独立的,但两者恰好指向同一块内存。