Greatings

Have a nice day

JavaScript中的相等比较

在js中,x==yx===y都会比较x、y两个值的相等性,并返回truefalse,二者遵循以下规则:

1.==

  1. 如果x和y的类型相同,则会返回x===y的结果
  2. 如果x为null而y为undefined,则返回true
  3. 如果x为undefined 而y为null,则返回true
  4. 如果x类型为Number,y类型为String,则会返回x==Number(y)
  5. 如果x类型为String,y类型为Number,则会返回Number(x)==y
  6. 如果x为布尔值,则返回Number(x)==y
  7. 如果y为布尔值,则返回x==Number(y)
  8. 如果x类型为StringNumberSymbol类型之一,y类型为Object,则返回x==ToPrimitive(y)
  9. 如果x类型为Object,y类型为StringNumberSymbol类型之一,则返回ToPrimitive(x) == y
  10. 其他情况,返回false

2.===

  1. 如果x和y的类型不同,则返回false
  2. 如果x类型为Number,则
    • 如果x为NaN则返回false
    • 如果y为NaN则返回false
    • 如果如果x和y为相等的数值,则返回true
    • 如果x为+0,y为-0,则返回true
    • 如果x为-0,y为+0,则返回true
    • 其他情况返回false
  3. 其他情况返回SameValueNonNumber(x, y)

参考ecma-international