该问题考察的知识点为:JavaScript隐式转换
JavaScript中的ToPrimitive规则
当对象类型和原始类型做相等比较时,对象类型会依照ToPrimitive
规则转换为原始类型
ToPrimitive
指对象类型类型(如:对象、数组)转换为原始类型的操作。
当对象类型需要被转为原始类型时,它会先查找对象的value0f
方法,如果value0f
方法返回原始类型的值,则ToPrimitive
的结果就是这个值
如果value0f
不存在或者value0f
方法返回的不是原始类型的值,就会尝试调用对象的toString
方法,也就是会遵循对象的ToString
规则,然后使用toString的返回值作为ToPrimitive
的结果。.
如果valueOf
和toString
都没有返回原始类型的值,则会抛出异常。
字符串和数字比较时,会先转为数字类型,空字符为0
所以:
[].valueOf()== 0
↓
[].toString()== 0
↓
Number("") == 0
↓
==0