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

时间:2014-12-25 07:30:53

标签: javascript jquery operators comparison-operators

我尝试$(document) === $(document),但结果是false ..

有没有人有这方面的想法?

4 个答案:

答案 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元素的两个不同对象。