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

标签 javascript comparison-operators

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

因为 null0 是不同的基本类型,Abstract Equality Comparison Algorithm 中未指定任何转换。 ,没有调用 ToNumber 。他们根本就不相等,一点。

但是在 Firefox 中,有 a bug有了这个。

关于javascript - 为什么运算符 equal 不将从 valueOf() 获得的 null 转换为零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28410498/

相关文章:

javascript - 查询字符串发送值 = 0,不是 jQuery 中的新赋值

c++ - 和有什么区别! ( x < y ) 和 x >= y 在 C++ 中?

c - 为什么 while (1 < a < 5) 是一个无限循环?

javascript - 旋转的 X 轴标签与图形本身重叠

javascript - 修复 SwipeRight - JQuery Mobile

javascript - 仅在不活动时悬停

c++ - 整数不等于它的值

c - 为什么不认为无符号 4 大于有符号 -2?

ruby - Ruby 的排序方法如何与组合比较(宇宙飞船)运算符一起工作?

javascript - 粗箭头函数 (=>) 的语法,在主体周围使用或不使用 {}