Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么$(“body”quot;)==$(“body”quot;)返回false?_Javascript_Jquery_Jquery Selectors - Fatal编程技术网

Javascript 为什么$(“body”quot;)==$(“body”quot;)返回false?

Javascript 为什么$(“body”quot;)==$(“body”quot;)返回false?,javascript,jquery,jquery-selectors,Javascript,Jquery,Jquery Selectors,为什么标题中的等式是假的?如何检查两个jQuery选择器是否指向同一个DOM对象?使用$.is() 对照选择器、元素或jQuery对象检查当前匹配的元素集,如果这些元素中至少有一个与给定参数匹配,则返回true 与其他筛选方法不同,.is()不会创建新的jQuery对象。相反,它允许您测试jQuery对象的内容,而无需修改。这在回调中通常很有用,例如事件处理程序 因为jQuery为每个$调用创建一个新的包装器对象,在Javascript中,所有对象都是不同的,即使它们具有完全相同的属性/方法

为什么标题中的等式是假的?如何检查两个jQuery选择器是否指向同一个DOM对象?

使用$.is()

对照选择器、元素或jQuery对象检查当前匹配的元素集,如果这些元素中至少有一个与给定参数匹配,则返回
true

与其他筛选方法不同,
.is()
不会创建新的jQuery对象。相反,它允许您测试jQuery对象的内容,而无需修改。这在回调中通常很有用,例如事件处理程序


因为jQuery为每个
$
调用创建一个新的包装器对象,在Javascript中,所有对象都是不同的,即使它们具有完全相同的属性/方法

另一方面,
document.body==document.body
的计算结果将为
true
您正在比较两个不同的jQuery对象,因为您调用了两次
$()
(等式的每边调用一次),jQuery会为每次调用它创建新的包装器对象。这就是为什么比较结果为假

可以通过使用或数组解引用从每个jQuery对象提取DOM对象,然后比较这些元素。由于两个相同的选择器都匹配相同的
body
DOM元素,因此以下两个选项都返回true:

$('body').get(0) == $('body').get(0)
$('body')[0] == $('body')[0]
如果要针对jQuery选择器进行测试,请使用。请注意,除非您的选择器相同,否则您使用的选择器可能不一定匹配相同的DOM元素(最好使用上面的选项)。这也会返回true:

$('body').is('body')

第一句话只有在您已经知道$()函数创建了新对象时才清楚,因此MooGoo的回答更具解释性。如果我有
函数a(){return true;}
,则
a()==a()
为true。如果上面不清楚,
is
不测试相等性,它测试集合中是否至少有一个元素与给定选择器匹配。例如
$('#cb').is(':checked')
。有关为什么需要$.is()的实际解释,请参阅其他答案。您首先解释了包装器对象的创建+1.