Почему `$ (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.