- 下面的内容来自于《JavaScript高级程序设计(第三版)》
1. 关系操作符(大于(>),大于等于(>=),小于(<),小于等于(<=))的比较
-
如果两边比较的都是数字,则按照数值的大小来比较
-
如果两边都是字符串,则按照字符串对应的字符编码进行比较
-
如果一个操作数是数值,则将另一个操作数转换为数值然后进行比较
-
如果一个操作数是对象,则调用对象的
valueOf方法,用得到的结果按照前面的规则进行比较。如果没有valueOf()方法则可以调用toString()方法,并用得到的结果根据前面的规则执行比较 -
如果一个操作数是布尔值,则先将其转化为数值再进行比较
'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. 相等操作符(== 和 !==)
相等和不相等操作符-- 先转化再比较 全等和不全等操作法-- 仅比较而不转换
转换时遵循下面的基本规则:
- 如果一个操作数是布尔值,则在比较相等性之前先将其转换为数值 - false转换为0,true转换为1
- 如果一个操作数是数值,另一个是字符串,则将他们转换为数值
- 如果一个是对象,另一个不是,则调用对象的
valueOf()方法,用得到的基本类型值按照前面的规则进行比较
两个操作符比较时要遵循下面的规则
- null 和 undefined是相等的
- 要比较相等性之前,不能将null、 undefined转换为其他的值
- 如果有一个操作符是
NaN,则相等操作符返回false - 如果两个操作符是对象,则比较他们是不是同一个对象。
null == undefined //true
NaN == NaN //false
'NaN' == NaN //false
NaN !== NaN //true
false == 0 //true