在两个不同类型比较相等或不相等时,应当遵循一定的规则:
- 如果其中一个数为Boolean值,则在比较之前将其转为数值类型。(true转为1,false转为0)
- 如果其中一个数为数值类型,另一个是字符串类型,则在比较之前将字符串类型转为数值类型。
- 如果其中一个数是对象,另一个不是,则调用valueOf()方法将对象转为基本类型再按之前的规则进行比对。
valueOf():返回指定对象的原始值。
语法:
object.valueOf()
如果对象没有原始值,则valueOf将返回对象本身。一般由js在需要转换时隐式调用。
不同类型对象返回不同的值:
Array:返回数组对象本身。
Boolean: 返回布尔值
Date:存储的时间是从 1970 年 1 月 1 日午夜开始计的毫秒数 UTC。
Function: 返回函数本身。
Number: 返回数字值。
Object:返回对象本身。这是默认情况。
String:返回字符串值。
Math 和 Error 对象没有 valueOf 方法。
当判断"true" == true时,存在Boolean值,所以将true转为number类型1,变为"true" == 1,此时变为字符串和数值类型的比对,所以将"true"转为number类型,故为NaN == 1,因此结果返回false(类型相同值不同)