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

Han*_*Sun 14 javascript jquery operators comparison-operators

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

有没有人有这个想法?

Zud*_*dwa 19

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

return new jQuery.fn.init( selector, context );
Run Code Online (Sandbox Code Playgroud)

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

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

但是如果你把它变成变量,你就可以实现平等:

var d, d_copy;

d = $(document);

d_copy = d;

d_copy === d;  //true
Run Code Online (Sandbox Code Playgroud)


Or *_*uan 18

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

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

a = [1, 2]
[1,2]
b = [1, 2]
[1,2]
a == b
false
a === b
false
Run Code Online (Sandbox Code Playgroud)

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

你怎么能这样做?

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

$(document).is($(document))
true
Run Code Online (Sandbox Code Playgroud)


Sad*_*san 7

参考链接

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

alert($(document).is($(document)));  // return true
Run Code Online (Sandbox Code Playgroud)

JS小提琴


Pau*_*ito 5

每次document使用jQuery选择元素时,都会为jQuery对象提供一个新元素选择.

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