为什么 '$(document) === $(document)' 在 jQuery 中返回 false
Why does `$(document) === $(document)` returns false in jQuery?
我尝试了$(document) === $(document)
但发现结果是false
..
有人对此有想法吗?
因为在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
当你使用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
参考链接
您可以使用is()函数检查两个对象的相等性,例如
alert($(document).is($(document))); // return true
JS小提琴
每次使用 jQuery 选择
document
元素时,都会得到封装在 jQuery 对象中的该元素的新选择。
因此,对 $(document)
的第一次调用选择了 DOM 中的 document
元素,并为您提供了保存该选择的 jQuery 对象的新实例。第二个选择为您提供了封装相同document
元素的jQuery对象的另一个实例。虽然这些 jQuery 对象确实具有相同的数据成员,但它们是封装document
DOM 元素的两个不同对象。
相关文章:
- document.styleSheets不返回任何内容
- $(document).height和$(window).heaght都返回相同的值-使用的是正确的doctype
- 是否可以 document.getElementsByTagName('head')[0] ever 返回 null
- 为什么document.getElementsByClassName(“className”)返回对象
- document和window height返回相同的值
- document.write未返回字符串
- UIWebView 无法将 JavaScript 作为 document.getElementById 运行,返回 nu
- 为什么 document.getElementById('files') 返回空值
- document.activeElement 在 onblur 处理程序中返回 body
- 是否存在 document.getElementById('element')的情况;将返回未定义
- Firebug 返回:document.getElementById(..) 为空 - 我做错了什么
- JavaScript document.anchors.length 在 Firefox 中返回 1
- document.activeElement 返回一个 XULElement
- 多个 document.createElement 在一个函数中返回事件侦听器
- 为什么 '$(document) === $(document)' 在 jQuery 中返回 false
- document.getElementById 在单击按钮时返回 null
- document.getElementById 是否返回一个实时 dom 元素
- document.evaluate allways 在某些页面站点上的 singleNodeValue 中返回 nu
- document.body.style.zoom 返回空字符串
- document.getElementById 返回已知元素的 null - why