11-关系操作符

154 阅读2分钟
  • 下面的内容来自于《JavaScript高级程序设计(第三版)》

1. 关系操作符(大于(>),大于等于(>=),小于(<),小于等于(<=))的比较

  1. 如果两边比较的都是数字,则按照数值的大小来比较

  2. 如果两边都是字符串,则按照字符串对应的字符编码进行比较

  3. 如果一个操作数是数值,则将另一个操作数转换为数值然后进行比较

  4. 如果一个操作数是对象,则调用对象的valueOf方法,用得到的结果按照前面的规则进行比较。如果没有valueOf()方法则可以调用toString()方法,并用得到的结果根据前面的规则执行比较

  5. 如果一个操作数是布尔值,则先将其转化为数值再进行比较

    'Brick' < 'apple' //true
    

    因为这里比较的是字符串的字符编码'B'的字符串编码66 < 'a'的字符串编码97

    '23' < '3' //true
    

    两边都是字符串'2'的字符编50 < 3的字符编码51

    '23' < 3 //false
    

    一边为数字,则另一边转换为数字,'23'转换为数字是23

    'a' < 3 //false
    

    这里'a'需要被转为数字,由于'a'不能被转换成合理的数字就被转换成了NaN,根据规则,任何数和NaN比较返回的都是false

2. 相等操作符(== 和 !==)

相等和不相等操作符-- 先转化再比较 全等和不全等操作法-- 仅比较而不转换

转换时遵循下面的基本规则:

  1. 如果一个操作数是布尔值,则在比较相等性之前先将其转换为数值 - false转换为0,true转换为1
  2. 如果一个操作数是数值,另一个是字符串,则将他们转换为数值
  3. 如果一个是对象,另一个不是,则调用对象的valueOf()方法,用得到的基本类型值按照前面的规则进行比较

两个操作符比较时要遵循下面的规则

  • null 和 undefined是相等的
  • 要比较相等性之前,不能将null、 undefined转换为其他的值
  • 如果有一个操作符是NaN,则相等操作符返回false
  • 如果两个操作符是对象,则比较他们是不是同一个对象。
null == undefined  //true
NaN == NaN //false
'NaN' == NaN //false
NaN !== NaN //true
false == 0 //true