抽象相等()

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

== 运算符的规格:

7.2.13 抽象相等比较

比较 x == y,其中 xy 是值,产生 truefalse。这样的比较如下进行:

  1. 如果 Type(x)Type(y) 相同,那么:
  • **一个。**返回执行 Strict Equality Comparison x === y 的结果。
  1. 如果 xnullyundefined,则返回 true
  2. 如果 xundefinedynull,那么返回 true
  3. 如果 Type(x)NumberType(y)String,则返回比较结果 x == ToNumber(y)
  4. 如果 Type(x)StringType(y)Number,则返回比较结果 ToNumber(x) == y
  5. 如果 Type(x)Boolean,则返回比较结果 ToNumber(x) == y
  6. 如果 Type(y)Boolean,则返回 comparison x == ToNumber(y) 的结果。
  7. 如果 Type(x)StringNumber,或 SymbolType(y)Object,则返回比较结果 x == ToPrimitive(y)
  8. 如果 Type(x) 是 Object 而 Type(y)StringNumberSymbol,则返回比较结果 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