I tried $(document) === $(document)
but found the result is false
..
Does anyone have ideas about this?
I tried $(document) === $(document)
but found the result is false
..
Does anyone have ideas about this?
Because on top of jQuery, every call ($()
or jQuery()
) to it returns new instance:
return new jQuery.fn.init( selector, context );
So all jQuery instances (Even for same selectors) are always different (E.g. $("#id") === $("#id")//false
)
You can check source code (Line 78) of jQuery 2.1.0
But if you put it to variable, you can achieve an equality:
var d, d_copy;
d = $(document);
d_copy = d;
d_copy === d; //true
When you use jQuery you get a JS object back. This object is totally different every time you use the jQuery selector.
To understand this better, I played in the console with some arrays:
a = [1, 2]
[1,2]
b = [1, 2]
[1,2]
a == b
false
a === b
false
When using jQuery it's just like using objects, because you don't get a DOM element in response (maybe that why you got confused)
How Can You Do It?
If you do want to compare 2 jQuery objects you could use the is() jQuery method:
$(document).is($(document))
true
You can check equality of two object using is() function like
alert($(document).is($(document))); // return true
Each time you select the document
element using jQuery, you are given a new selection of that element encapsulated in a jQuery object.
Thus, the first call to $(document)
selects the document
element in the DOM and gives you a new instance of a jQuery object which holds that selection. The second selection hands you yet another instance of a jQuery object encapsulating the same document
element. While these jQuery objects do indeed have identical data members, they are two distinct objects encapsulating the document
DOM element.