比较运算符
两端都是字符串时,不转换直接用Unicode码点数进行比较
一端是其他原始类型时,两端值都将值转成数字用
Number()转换,然后比较, 如果一端是原始类型,一端是object类型值,调用object类型值的valueof()方法,如果valueof()返回原始类型值,按前面的进行比较,(也就是如果两端都是字符串,Unicode;负责转换成number),调用tostring
== 是非严格比较
- 如果两边类型相同,相当于用 === 比较,不会发生类型转变;
- string == boolean 将boolean转成number;再将string转成number;
- string == number 将string转成number,再比较;
- 如果object == boolean 会将object转成基本类型,先调用
valueof()方法,如果返回的是一个对象,会调用toString方法,返回的如果还是一个对象将会报错;按照前面的方式进行比较; - number == boolean 将boolean转换成number,在比较;
例子
console.log([] == 0)因为[]是一个数组,并且他们不是同一类型,将数值转成原始类型,调用
valueof()方法,数值的valueof()方法默认是返回原数组,所以调用toString()方法,数组的toString()方法默认是用逗号将数组中的每一个元数链接起来;就相当于调用[].join(',')方法;[]返回一个空字符串,"" == 0; 会将字符串转成number,这里是用Number('')转换,所以是0; 打印true