我试图理解为什么两个jQuery对象不被认为是平等的。当我将$(this)传递给console.log()
时,我得到:
w.fn.init [input#company-center.drop-menu-open]
然后,当我将$("#idVal")
传递给console.log()
时,我得到完全相同的结果:
w.fn.init [input#company-center.drop-menu-open]
但是,当我做$(this) == $("#idVal")
时,它返回false。
是因为==
?为什么它给了我false
?
$(this) == $("#idVal")
返回false
的原因是因为$(this)
和$("#idVal")
是两个不同的对象实例(尽管它们正在包装相同的底层DOM元素)。
要确定两个jQuery对象的底层元素是否等效,请使用$.is()
:
$(this).is("#idVal") // will return true if this is id=idVal
每次调用$()
时,它都会创建一个新的jQuery对象。由于==
测试的是对象相等,而不是内容等价,因此它们不能相等。
您可以使用jQuery .is()
方法:
$(this).is("#idVal");
但你甚至不需要jQuery,只需使用:
this.id == "idVal"
原因是内部JavaScript实际上有两种不同的方法来测试相等性。字符串和数字等原语按其值进行比较,而数组,日期和普通对象等对象则按其引用进行比较