【问题标题】:The same object is not always the same?同一个对象不总是一样的吗?
【发布时间】:2016-07-15 15:55:58
【问题描述】:

为什么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

【问题讨论】:

标签: javascript google-chrome comparison object-equality


【解决方案1】:

行内:

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 后,引用是独立的,但都恰好指向同一个内存块。

【讨论】:

  • 你的意思是a.property = 5
  • 糟糕,我的错,从 jsfiddle 复制并粘贴了错误的部分。
猜你喜欢
  • 2020-05-08
  • 1970-01-01
  • 2015-12-14
  • 2012-08-08
  • 2013-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多