比较双方首先调用ToPrimitive,如果结果出现非字符串,就根据ToNumber规则将双方强制类型转换为数字进行比较

1. ToPrimitive(…)

将值转化为基本类型的转化规则

  1. 检查改值是否具有valueof方法,如果有并且返回基本类型,就使用该值进行强制的类型转换
  2. 如果没有就使用toString方法的返回值(如果存在)来进行强制转换
  3. 如果valueof和toString均不返回基本类型值,就报TypeError错误

2. ToNumber(…)

转化规则

  1. true,转化为1,false转化为0,undefined转化为NaN,null转化为0

    1. 对象(包括数组)都会相应的被转换为相应的基本类型,如果返回的是非数字的基本类型值,在遵循以上的转换规则

3. 一些特殊规则

  1. var a={b:42};
  2. var b={b:43}
  3. a<b;//false
  4. a==b;//false
  5. a>b;//false
  6. a<=b;//true
  7. a>=b;//true

解析

根据规范a<=b会被处理为b<a,让后将结果反转;因为b<a的结果是false,所以a<=b的结果是true