JS中的比较操作符

205 阅读2分钟

写在前面

本文是对ECMAScript2020文档中的一些记录,地址放在这里

前置准备

JS中的数据类型

js中的数据类型包括NullUndefinedBooleanNumberStringSymbol以及Object

比较操作符

JS中提供两种比较操作符=====,比较两个值x和y,即x == yx === y会返回truefalse

相等运算符 ==

当使用相等运算符==比较两个值时,会按照如下规则返回true或者false

  1. xy类型相同时,返回严格相等的结果x === y
  2. 如果xnull并且yundefined,返回true
  3. 如果xundefined并且ynull,返回true
  4. 如果xNumber类型,yString类型,返回x == ToNumber(y)的结果
  5. 如果xString类型,yNumber类型,返回ToNumber(x) == y的结果
  6. 如果xBigInt类型,yString类型
    1. StringToBigInt(y)的值赋给n
    2. 如果nNaN返回false
    3. 返回 x == n
  7. 如果xString类型,yBigInt类型,返回 y == x
  8. 如果xBoolean类型,返回ToNumber(x) == y
  9. 如果yBoolean类型,返回x == ToNumber(y)
  10. 如果xStringNumberBigIntSymbol中的任意一个,并且yObject类型,返回 x == ToPrimitive(y)
  11. 如果xObject类型,并且是StringNumberBigIntSymbol中的任意一个,返回 ToPrimitive(x) == y
  12. 如果xBigIntyNumber类型或者xNumber类型,yBigInt
    1. 如果xy任意一个是Nan+∞-∞,返回false
    2. 如果xy的数学值相等返回true否则返回false
  13. 不是以上情况,返回false

严格相等运算符 ===

  1. 如果xy的类型不同,返回false
  2. 如果xNumberBigInt,判断x和y是否数值相等
  3. 返回SameValueNonNumeric(xy)