【问题标题】:How does Javascript determine whether two objects are the same?Javascript如何判断两个对象是否相同?
【发布时间】:2016-04-28 16:26:46
【问题描述】:

我阅读了equality comparison at MDN 上的文档,但我对 Javascript 如何执行严格的相等检查很感兴趣。

还有这个规范:http://ecma-international.org/ecma-262/5.1/#sec-11.9.6,不过,我不太明白它是如何应用于两个对象的。最后一句话是我认为的关键:

Return true if x and y refer to the same object. Otherwise, return false.

但是 Javascript 如何检查它们是否引用同一个对象?

例如,给定一个具有name 属性的对象Kitten,我创建了两个用它们的名字初始化的小猫:

var kittenA = new Kitten("kitty A");
var kittenB = new Kitten("kitty B");

Javascript 使用什么来确定以下语句

kittenA === kittenB

会返回假吗?

【问题讨论】:

  • 您可能对How to explain object references in ECMAScript terms? 感兴趣。我认为这背后没有太多其他内容。
  • 您的标题问题听起来有点像重复的Difference between == and === in JavaScript。您应该对其进行编辑,以明确您的问题仅限于对象。
  • 检查引用是否相同(即kittenAkittenB 都指向同一个底层对象)。在这种情况下,引用指向不同的对象,这就是它返回 false 的原因。
  • @Bergi 我已经更新了标题。我也查看了答案,但我不确定哪一部分可以帮助我(或某人)理解 javascript 如何检查对象的引用。
  • @MxyL:V8 和 Gecko 都是开源的,所以是的,如果您有兴趣可以查一下。对象引用通常只是一个(可能已标记)指向某个内存块的指针,该内存块包含对象的数据和关于该对象的数据。

标签: javascript comparison equality


【解决方案1】:

kittenAkittenB 都是 object 类型,因此适用案例 7:

  1. 如果 x 和 y 引用同一个对象,则返回 true。否则,返回 false。

引擎如何知道它们是对同一个对象的两个引用?引用的具体实现方式因引擎而异。它可能只是一个指向内存位置的数字或列表(所有对象)中的索引。

【讨论】:

    猜你喜欢
    • 2018-05-14
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2018-05-06
    • 1970-01-01
    • 2013-07-15
    • 2011-03-24
    相关资源
    最近更新 更多