我尝试$(document) === $(document)
,但结果是false
..
有没有人有这方面的想法?
答案 0 :(得分:19)
因为在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
答案 1 :(得分:18)
当你使用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
答案 2 :(得分:7)
<强> Reference Link 强>
您可以使用 is() 功能检查两个对象的相等性,例如
alert($(document).is($(document))); // return true
<强> JS Fiddle 强>
答案 3 :(得分:5)
每次使用jQuery选择document
元素时,都会为jQuery对象提供一个新元素选择。
因此,对$(document)
的第一次调用选择了DOM中的document
元素,并为您提供了一个包含该选择的jQuery对象的新实例。第二个选择将另一个jQuery对象实例封装为同一个document
元素。虽然这些jQuery对象确实具有相同的数据成员,但它们是封装document
DOM元素的两个不同对象。