【发布时间】:2020-04-22 23:54:07
【问题描述】:
Boolean(new Boolean(...)) === true 因为new Boolean(...) 是一个对象。
但为什么是Number(new Boolean(false)) === 0 (+new Boolean(false) === 0) 和Number(new Boolean(true)) === 1?为什么不NaN*?
为什么第一个例子没有拆箱,而第二个例子有?
*isNaN(Number({})) === true
【问题讨论】:
-
Number调用toPrimitive,这将解开布尔值。 -
Number将对象转换为数字。布尔值true和false转换为1和0,Boolean对象遵循相同的逻辑。另外,我不确定您所说的没有拆箱是什么意思。 -
Boolean不这样做,它有一个非常简单的表,它遵循,结果应该是true还是false。如您所见,在该表中,对象被解释为true。 “为什么”是一个难题,但规范就是这样。另一个例子是Number({ valueOf: _ => 4}) === 4。
标签: javascript