在最后一行中,我知道调用a.valueOf()是因为操作数不是同一类型。知道null转换为零,为什么浏览器不会将null转换为零并在结尾处返回false?
function A(){}
A.prototype.valueOf = function(){return null}
var a = new A
a == null // => This is always false
a == 0 // => true or false depending on the browser you are using.
答案 0 :(得分:1)
我知道使用valueOf()是因为操作数不是同一类型
不一般"当它们不是同一类型时#34;,没有。仅在将布尔值,数字或字符串与对象进行比较时才会调用ToPrimitive
(以及随后的[[DefaultValue]]
和.valueOf
)。
null转换为零
是的,当ToNumber
被调用时。例如,在调用ToString
时没有。
为什么浏览器不会将null转换为零并在结尾处返回false?
由于null
和0
是不同的原始类型,Abstract Equality Comparison Algorithm未指定转换,因此不会调用ToNumber
。他们根本不平等,指出。
但在Firefox中,a bug就是这样。