Почему `$ (document) === $(document)` возвращает false в jQuery?

Я попробовал $(document) === $(document), но нашел результат false..

Есть ли у кого-нибудь идеи об этом?

Ответы

Ответ 1

Когда вы используете 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

Поскольку поверх jQuery каждый вызов ($() или jQuery()) возвращает новый экземпляр:

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

Итак, все экземпляры jQuery (даже для тех же селекторов) всегда разные (например, $("#id") === $("#id")//false)

Вы можете проверить исходный код (строка 78) jQuery 2.1.0

Но если вы поместите его в переменную, вы можете достичь равенства:

var d, d_copy;

d = $(document);

d_copy = d;

d_copy === d;  //true

Ответ 3

Ссылка Ссылка

Вы можете проверить равенство двух объектов, используя (), например

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

JS Fiddle

Ответ 4

Каждый раз, когда вы выбираете элемент document с помощью jQuery, вам предоставляется новый выбор этого элемента, инкапсулированного в объект jQuery.

Таким образом, первый вызов $(document) выбирает элемент document в DOM и дает вам новый экземпляр объекта jQuery, который содержит этот выбор. Второй выбор передает вам еще один экземпляр объекта jQuery, инкапсулирующего один и тот же элемент document. Хотя эти объекты jQuery действительно имеют одинаковые элементы данных, они представляют собой два разных объекта, инкапсулирующих элемент document DOM.