为什么运算符相等不将从valueOf()获得的null转换为零?

时间:2015-02-09 13:03:32

标签: javascript comparison-operators

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

1 个答案:

答案 0 :(得分:1)

  

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

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

  

null转换为零

是的,当ToNumber被调用时。例如,在调用ToString时没有。

  

为什么浏览器不会将null转换为零并在结尾处返回false?

由于null0是不同的原始类型,Abstract Equality Comparison Algorithm未指定转换,因此不会调用ToNumber。他们根本不平等,指出。

但在Firefox中,a bug就是这样。