为什么 '$(document) === $(document)' 在 jQuery 中返回 false

Why does `$(document) === $(document)` returns false in jQuery?

本文关键字:document 返回 false 为什么 jQuery      更新时间:2023-09-26

我尝试了$(document) === $(document)但发现结果是false..

有人对此有想法吗?

因为在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

当你使用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

参考链接

您可以使用is()函数检查两个对象的相等性,例如

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

JS小提琴

每次使用 jQuery 选择

document元素时,都会得到封装在 jQuery 对象中的该元素的新选择。

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