比较运算符

比较运算符也具有返回值,返回布尔值

  1. var a = 5 > 4
  2. a // true

字符串的比较

同是字符串类型的比较,比较的是 unicode

  1. 先比较首字母的,如果有结果,则返回。
  2. 如果没有结果,比较第二位的字符编码,重复以上步骤。
  3. 如果两个字符串已经比较完了,则判断相等,如果有一方已经结束,则另一方大。
  1. var a = 'ab' > 'a' // true

不同类型之间的比较

不同类型之间的比较,会首先将其转为数字在比较。

一些特殊情况:

  1. var a = 0
  2. var b = '0'
  3. Boolean(a) // false
  4. Boolean(b) // true
  5. a == b // true

严格相等

上面之所以会先转为数字,是因为不是严格相等的比较。严格相等,则不会隐式转换。

  1. var a = 1 === '1' // false

null和undefined

一直以为空值(如null, undefined, ‘’)比较时,如果转为数字,会隐式转为0,但实际上并不完全是的。

  1. null == undefined // true
  2. null === undefined // false

使用数学或其他比较方法时,会隐式转换, null => 0 , undefined => NaN

特别注意的比较

null
  1. null > 0 // false
  2. null == 0 // false
  3. null >= 0 // true

第一个 null隐式转为0, 0 > 0 false
第二个并没有隐式转换,因为相等性检测 ==普通比较符 > < >= <= 的代码逻辑是独立的。null和undefined的相等性检测,不会进行任何的类型隐式转换,除了它们两个之间的相等性检测是true,不会等于任何其他值。
第三个 根据第二个说描述,>= 属于普通比较符,会进行隐式转换为 0。

undefined

undefined隐式转换为数字类型时是 NaN ,所以会看到如下。

  1. undefined > 0 // false
  2. undefined < 0 // false
  3. undefined == 0 // false 不进行隐式转换,走null和undefined自己的相等性检测