抽象相等()

抽象等式运算符的操作数在转换为公共类型后进行比较。如何进行此转换是基于运算符的规范:

== 运算符的规格:

7.2.13 抽象相等比较

比较 x == y,其中 x 和 y 是值,产生 true 或 false。这样的比较如下进行:

  1. 如果 Type(x) 与 Type(y) 相同,那么:
  • **一个。**返回执行 Strict Equality Comparison x === y 的结果。
  1. 如果 x 是 null 而 y 是 undefined,则返回 true。
  2. 如果 x 是 undefined 而 y 是 null,那么返回 true。
  3. 如果 Type(x) 是 Number 而 Type(y) 是 String,则返回比较结果 x == ToNumber(y)。
  4. 如果 Type(x) 是 String 而 Type(y) 是 Number,则返回比较结果 ToNumber(x) == y。
  5. 如果 Type(x) 是 Boolean,则返回比较结果 ToNumber(x) == y。
  6. 如果 Type(y) 是 Boolean,则返回 comparison x == ToNumber(y) 的结果。
  7. 如果 Type(x) 是 String,Number,或 Symbol,Type(y) 是 Object,则返回比较结果 x == ToPrimitive(y)。
  8. 如果 Type(x) 是 Object 而 Type(y) 是 String,Number 或 Symbol,则返回比较结果 ToPrimitive(x) == y。
  9. 返回 false。

例子:

1 == 1;                     // true
1 == true;                  // true  (operand converted to number: true => 1)
1 == '1';                   // true  (operand converted to number: '1' => 1 )
1 == '1.00';                // true
1 == '1.00000000001';       // false
1 == '1.00000000000000001'; // true  (true due to precision loss)
null == undefined;          // true  (spec #2)
1 == 2;                     // false
0 == false;                 // true
0 == undefined;             // false
0 == "";                    // true