【问题标题】:Why does `$(document) === $(document)` returns false in jQuery? [duplicate]为什么 `$(document) === $(document)` 在 jQuery 中返回 false? [复制]
【发布时间】:2015-02-23 01:25:34
【问题描述】:

我试过$(document) === $(document),但发现结果是false..

有人对此有想法吗?

【问题讨论】:

  • 同理{} === {}返回false,没有两个对象永远相等,除非它们是完全相同的对象,即a = b = {}; a===b
  • 请说明重新开放的原因。

标签: javascript jquery operators comparison-operators


【解决方案1】:

因为在 jQuery 之上,对它的每次调用($()jQuery())都会返回新实例:

return new jQuery.fn.init( selector, context );

所以所有 jQuery 实例(即使对于相同的选择器)总是不同的(例如 $("#id") === $("#id")//false

您可以查看jQuery 2.1.0的源代码(第78行)

但是如果你把它放到变量中,你可以实现相等:

var d, d_copy;

d = $(document);

d_copy = d;

d_copy === d;  //true

【讨论】:

    【解决方案2】:

    当你使用 jQuery 时,你会得到一个 JS 对象。每次使用 jQuery 选择器时,这个对象都会完全不同。

    为了更好地理解这一点,我在控制台中使用了一些数组:

    a = [1, 2]
    [1,2]
    b = [1, 2]
    [1,2]
    a == b
    false
    a === b
    false
    

    使用 jQuery 就像使用对象一样,因为你没有得到 DOM 元素作为响应(也许这就是你感到困惑的原因)

    你怎么做?

    如果您确实想比较 2 个 jQuery 对象,您可以使用 is() jQuery 方法:

    $(document).is($(document))
    true
    

    【讨论】:

      【解决方案3】:

      Reference Link

      您可以使用 is() 之类的函数来检查两个对象的相等性

      alert($(document).is($(document)));  // return true
      

      JS Fiddle

      【讨论】:

        【解决方案4】:

        每次使用 jQuery 选择 document 元素时,都会为您提供一个封装在 jQuery 对象中的新元素选择。

        因此,第一次调用$(document) 会选择DOM 中的document 元素,并为您提供一个保存该选择的jQuery 对象的新实例。第二个选择为您提供另一个封装相同document 元素的jQuery 对象实例。虽然这些 jQuery 对象确实具有相同的数据成员,但它们是封装document DOM 元素的两个不同对象。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-07-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-06-22
          相关资源
          最近更新 更多