【问题标题】:Is `==` still called the "abstract equality operator"?`==` 仍然被称为“抽象相等运算符”吗?
【发布时间】:2021-10-20 11:08:34
【问题描述】:

==曾经被称为抽象相等运算符,它的abstract equality comparison algorithm是在ECMAScript规范中定义的。

该算法现在在规范中命名为IsLooselyEqual,规范中不再使用“抽象相等”一词。

运营商改名了吗?

【问题讨论】:

  • 是的,我们称之为equal equal。而===exactly equal equal
  • 我投票结束这个问题,因为问题与代码无关,但与使用的术语有关
  • 这与代码无关。
  • @Justinas 我从未听说过=== 被称为“完全平等”。规范也没有这样引用它。

标签: javascript


【解决方案1】:

可以调用== 抽象相等运算符,因为它根据抽象相等比较算法进行检查。所以,这是一个有效的(如果不是官方的)名称。

对此更流行的名称是“松散平等”。也是一个非官方的名字。它反对与=== 的“严格平等”。


运算符在ECMAScript 5 中简称为“等号运算符”。

在 ECMAScript 6 中,规范有一个伞形 12.10 Equality Operators 部分,它将 ==!====!== 组合在一起。但是,部分规范仍然提到“相等运算符”,例如 12.10.3 Runtime Semantics: Evaluation,在本节末尾有以下内容:

注意 2 等式运算符保持以下不变量:

  • A != B 等价于 !(A == B)
  • A == B 等价于B == A,除了AB 的评估顺序。

注意 3 等式运算符并不总是可传递的。例如,可能有两个不同的 String 对象,每个对象代表相同的 String 值; == 运算符将认为每个 String 对象都等于 String 值,但两个 String 对象不会彼此相等。例如:

  • new String("a") == "a""a" == new String("a") 都是 true
  • new String("a") == new String("a")false

在最新的官方 ECMAScript 12 (2021) 规范中仍然如此。相关部分是13.11 Equality Operators,其中仍包含==!====!==13.11.1 Runtime Semantics: Evaluation 的结尾仍然包含与 ECMAScript 6 相同的注释。


因此 operator 是“相等运算符*。它执行的 operation 称为Abstract Equality Comparison in ECMAScript 12(与=== 类似的“严格相等比较” ),最近在最新 (2022) 草案中已重命名为 IsLooselyEqual(带有类似的“IsStrictlyEqual”)。

【讨论】:

    【解决方案2】:

    在 ECMAScript 5 中,== 运算符被称为“equals operator”,=== 被称为“strict equals operator”。

    在 ES2022 中,术语“equality operators”用于包含两者(并且不会出现成对的“等号运算符”)。

    术语“松散相等运算符”没有出现在 ES2022 中,尽管用于定义其行为的算法称为 IsLooselyEqual

    术语“严格相等运算符”没有出现在 ES2022 中,尽管用于定义其行为的算法称为 IsStrictlyEqual

    在此基础上,我想说== 从未* 被正式称为“抽象相等运算符”。它是“等号运算符”。然而,鉴于规范中不再使用 this 术语,它的名称可能已更改为“等式运算符”或“松散等式运算符”(反之为“严格等式运算符")。

    *ES5之前需要检查

    【讨论】:

    • "*需要在 ES5 之前检查" - ES1 只有“平等运算符”(查看规范的“11.9 平等运算符”第 46 页/第 58 页PDF)。还没有严格的平等。 ES2 是相同的 - 规范的第 50 页。 ES3 引入了严格相等,但仍然只是等于运算符。规范第 55 页。
    • 供参考,过去的规格已发布on this page by ECMA international
    猜你喜欢
    • 1970-01-01
    • 2011-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-31
    • 1970-01-01
    • 2010-11-05
    相关资源
    最近更新 更多