在最后一行中,我知道调用了 a.valueOf() ,因为操作数的类型不同。知道 null 会转换为 0,为什么浏览器不会将 null 转换为 0 并在最后返回 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.
最佳答案
I know that valueOf() is used because the operands are not of the same type
一般来说“当它们不是同一类型时”,不是。仅当将 bool 值、数字或字符串与对象进行比较时才会调用 ToPrimitive
(以及随后的 [[DefaultValue]]
和 .valueOf
) .
null converts to zero
是的,当调用 ToNumber
时。例如,当调用 ToString
时,它不会。
Why a browser would not convert null to zero and return false at the end?
因为 null
和 0
是不同的基本类型,Abstract Equality Comparison Algorithm 中未指定任何转换。 ,没有调用 ToNumber
。他们根本就不相等,一点。
但是在 Firefox 中,有 a bug有了这个。
关于javascript - 为什么运算符 equal 不将从 valueOf() 获得的 null 转换为零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28410498/