我在我的控制台中运行了以下行(一旦加载了jquery脚本),并收到以下结果:
$(this)
> [Window]
$(this) != $(this)
> true
$(this) == $(this)
> false
$(this) === $(this)
> false
而且我不知道采取什么措施来弄清楚发生了什么。我的猜测是,有一些对象持有基于时间的价值正在发生变化,但我不知道它是否有所不同。我会尝试在此期间比较这些值,但我希望有人可能会理解这里发生了什么。
编辑以解决我不知道$(arg)的底层实现的问题。我不知道它返回了一个新的引用对象。因此,我不相信这是"如何确定两个JavaScript对象的相等性的重复?"。
答案 0 :(得分:7)
使用$()
返回jQuery实例。因此,您使用this
和另一个this
实例创建一个实例,您有两个单独的实例。尽管它们与this
共享相同的引用,但实例并不相同,而且正在进行比较。
有一个可视化的例子可能会有所帮助,并且可能会让事情变得更加清晰。 jQuery像一个类一样运行。因此,让我们使用非常简单的示例,例如,$()
函数不存在:
class jQuery {
constructor(element) {
this.element = element;
}
}
var obj1 = new jQuery(this);
var obj2 = new jQuery(this);
console.log(obj1 === obj2); // false
这两个都使用完全相同的参数(this
)来创建一个新的" jQuery"宾语。但是,再一次,obj1是一个完全不同于obj2的实例。他们在记忆中都有自己独特的地方。