比较双方首先调用ToPrimitive,如果结果出现非字符串,就根据ToNumber规则将双方强制类型转换为数字进行比较
1. ToPrimitive(…)
将值转化为基本类型的转化规则
- 检查改值是否具有valueof方法,如果有并且返回基本类型,就使用该值进行强制的类型转换
- 如果没有就使用toString方法的返回值(如果存在)来进行强制转换
- 如果valueof和toString均不返回基本类型值,就报TypeError错误
2. ToNumber(…)
转化规则
true,转化为1,false转化为0,undefined转化为NaN,null转化为0
- 对象(包括数组)都会相应的被转换为相应的基本类型,如果返回的是非数字的基本类型值,在遵循以上的转换规则
3. 一些特殊规则
var a={b:42};
var b={b:43}
a<b;//false
a==b;//false
a>b;//false
a<=b;//true
a>=b;//true
解析
根据规范a<=b会被处理为b<a,让后将结果反转;因为b<a的结果是false,所以a<=b的结果是true