相等比较、关系比较总结

相等比较:

以 x 和 y 为例
‘==’比较时可能会进行自动类型转换,规则如下:

  1. 若 x 与 y 有一个为NaN,则返回false(NaN != NaN)。
  2. null 、undefined不等于其它任何值,它们只等于自己或对方(null == undefined)。
  3. 若 x 或 y 为true、false,则先将它转换为数字1、0,再比较。
  4. 若两者均为对象,则比较的是引用值。
  5. 若其中之一为对象,先把对象‘拆装’转换为和对方一样的基本类型,再进行比较。("" == [ ],0 == [ ])
  6. 字符串与数字比较,先把字符串转为数字再比较,"" == 0,"\n" == 0

‘===’比较时不进行类型转换,规则如下:

  1. 如果x、y类型不同,则返回false
  2. 类型相同时:
    2.1 若有一个为NaN,则返回false
    2.2 引用值不相同(引用不同一对象,即使对象看上去一样),则返回false
    2.3 值不相等(除了+0 === -0 //true),返回false
    2.3 其它比较均返回true

注意

  1. 如果x、y中有一个为true或false,千万不要使用来比较,最好用=来比较。
  2. 如果x、y中有[ ]、""、0,尽量不要使用来比较,最好用=来比较。
  3. 最好用typeof x == 'string'; typeof操作符总是返回7个字符串之一,这里用‘==’是绝对安全的,不会发生类型转换。

关系比较

以比较a、b为例

  1. 比较双方先调用valueOf()或toString()方法,若结果出现了非字符串,则转换为数字进行比较
  2. 比较双方均为字符串,则按字母顺序表来比较
    如:两个一样的对象,var a = {x:2}; var b = {x:1};
    比较时先全部转换为字符串,结果都为'[object Object]',所以a>b,a<b均为false,而a>=b,a<=b均为true,但是a == b为false,因为此时应用的是'=='比较规则。

posted on 2016-10-02 22:10  SuriFuture  阅读(313)  评论(0编辑  收藏  举报

导航