【问题标题】:Can you override what == does in Javascript? [duplicate]你能覆盖 JavaScript 中的 == 吗? [复制]
【发布时间】:2016-11-30 14:32:40
【问题描述】:

在 Python 中,可以通过为您的类定义 __eq__ 方法来覆盖 == 所做的事情。

是否可以在 Javascript 中做类似的事情?如果是这样,你是怎么做的?

我的理解是,默认情况下(可能总是,如果你不能覆盖它),当你执行== 时,Javascript 只会检查两个对象是否位于同一地址。如何直接获取地址?

我之所以问这一切,是因为我正在尝试调试一些早已不复存在的人编写的代码。据我所知,两个对象是相同的,但 == 正在返回 false。我试图找出原因...我想知道 == 是否在某个地方被覆盖(但它是一个很大的代码库,我不知道要搜索什么)或者对象是否被复制,所以据我所知,尽管它们是相同的,但它们存在于不同的地址。知道如何获取地址将有助于确认该理论并引导我找出问题所在。

【问题讨论】:

  • 无法覆盖 JavaScript 中的运算符。如果您在两个对象上使用 =====,它将返回 true 如果它们是相同的引用。
  • 对象看起来相同,但实际上不是内存中的同一个对象。仔细检查这一点的一种方法是添加一个具有值的属性,并查看它是否出现在另一个上。如果不是,它们是不同的对象。

标签: javascript equality comparison-operators


【解决方案1】:

通常不会。 JS 不允许运算符重载或运算符作为方法。

某些运算符在内部调用toStringvalueOf,您可以在自己的类上覆盖它们,从而影响行为。

【讨论】:

  • 有趣。这适用于==吗?
  • @ArtOfWarfare 有时。请参阅Abstract Equality Comparison,它解释了如何强制不同的操作数类型配对与== 进行比较,== 有时使用操作ToPrimitive,有时调用valueOftoString。但是,对于对象到对象的比较,== 会直接进行身份比较(“这些对象真的是同一个对象吗?”)
  • @ArtOfWarfare 有时,正如 apsillers 所阐述的那样。我需要仔细阅读规范并查看哪些操作员可以执行此操作,但在工作时执行此操作有点繁琐(抱歉)。
  • @apsillers,ssube。如果双方都是对象,不要认为有办法影响==
【解决方案2】:

不,不能直接在 JavaScript 中覆盖任何运算符。

【讨论】:

    猜你喜欢
    • 2022-11-25
    • 2020-09-05
    • 1970-01-01
    • 2011-01-28
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2011-09-22
    • 2015-12-05
    相关资源
    最近更新 更多