【问题标题】:In JQuery, why does $(this) == $(this) return false? [duplicate]在 JQuery 中,为什么 $(this) == $(this) 返回 false? [复制]
【发布时间】:2017-07-08 06:32:36
【问题描述】:

我在控制台中运行了以下几行(一旦加载了 jquery 脚本),并收到了以下结果:

$(this)
> [Window]
$(this) != $(this)
> true
$(this) == $(this)
> false
$(this) === $(this)
> false

而且我不知道要采取什么步骤来弄清楚发生了什么。我的猜测是,有些对象的基于时间的值正在发生变化,但我想知道它是否有所不同。同时我会尝试比较这些值,但我希望有人能理解这里发生了什么。

编辑以解决我不知道 $(arg) 的底层实现这一点。我不知道它返回了一个新的参考对象。因此,我不认为这是“如何确定两个 JavaScript 对象的相等性?”的重复。

【问题讨论】:

  • “我会在此期间尝试比较这些值”您要确定什么?
  • @guest271314 比较以查看所有属性的值是否相等。我现在看到 javascript equals 仅基于相等性进行评估,并且 $(this) 每次调用时都会返回一个新引用。因此,baao,我不认为这是重复的。我不知道 $(this) 每次都向“this”返回一个新的引用对象,而您的链接问题中没有解决这个问题。
  • 之前的反对票似乎不公平。这是一个合理的问题。

标签: javascript jquery


【解决方案1】:

使用 $() 返回一个 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 完全不同的实例。他们在记忆中都有自己独特的位置。

【讨论】:

  • +1 - 此外,如果您想比较这些值,请使用this === this。澄清一下,当你用$() 包装它时,会返回一个jQuery object 的实例(你可能想在你的回答中澄清这一点)。
  • 被标记为答案,因为它解决了问题的根源,本质上是“$(...) 返回(或在后台做什么)?”。
  • @NicholasFolk,太棒了。由于 JoshCrozier 的评论,我还继续添加了一个更明显的示例来说明其工作原理。
  • @JoshCrozier,感谢您提出的增加说明的建议!
猜你喜欢
  • 1970-01-01
  • 2021-09-05
  • 2014-07-19
  • 2013-05-26
  • 2016-04-06
  • 1970-01-01
  • 2017-06-23
  • 1970-01-01
  • 2011-05-22
相关资源
最近更新 更多