为什么运算符equal没有将从valueOf()获得的null转换为零

Why the operator equal is not converting null obtained from valueOf() to zero?

本文关键字:null 转换 equal 运算符 valueOf 为什么      更新时间:2023-09-26

在最后一行中,我知道调用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.

我知道使用valueOf()是因为操作数不是同一类型的

不是一般的"当它们不属于同一类型时",不是。ToPrimitive(以及随后的[[DefaultValue]].valueOf)仅在将布尔值、数字或字符串与对象进行比较时调用。

空转换为零

是的,当ToNumber被调用时。例如,当ToString被调用时,它不会。

为什么浏览器不会将null转换为零并在最后返回false?

因为null0是不同的基元类型,在抽象等式比较算法中没有指定转换,所以没有调用ToNumber。他们根本不平等。

然而,在Firefox中,有一个错误。