为什么!new Boolean(false)在JavaScript中等于false?
从JavaScripttypes的jQuery文档中 ,我们可以看到这段代码描述了转换为布尔值时string的行为(该主题与这个问题没有关系,但是它只是我find代码的地方):
!"" // true !"hello" // false !"true" // false !new Boolean(false) // false
我得到前三个例子,但是我没有得到最后一个例子,因为:
new Boolean(false) == false //true !false // true
所以我会假设:
!new Boolean(false) // true
但反而:
!new Boolean(false) // false, mind = blown
这是什么,我什至不…
是因为:
new Boolean(false) === false // false
如果是这样,这有什么用途?
new Boolean(false)
返回一个非空的对象 。 非空对象总是真的。
因此, !
任何非null对象将始终为false。
为了certificate你自己,你可以在你的JavaScript控制台中运行
(typeof new Boolean(false)) //"object"
此外,您可以使用strict equality
运算符来确认new Boolean(false)
不是真的false
:
new Boolean(false) === false // false
顺便说一句,调用Boolean
函数作为一个函数 – 没有新的 – 实际上会返回一个原语
!Boolean(false) // true (typeof Boolean(false)) //"boolean"
因为new Boolean
返回一个对象, 如下所述 。
那!
定义如下 :
11.4.9逻辑NOT运算符(
!
)生产UnaryExpression:! UnaryExpression的计算方法如下:
让expr是评估UnaryExpression的结果。
让oldValue为
ToBoolean(GetValue(expr))
。如果oldValue为
true
,则返回false
。返回
true
。
和 :
9.2 ToBoolean
抽象操作ToBoolean根据表11将其参数转换为Booleantypes的值:
表11 – 至宝转换
参数types – 结果
…
对象 –
true
所以,它是一个对象,因此ToBoolean
返回true
,因此!
返回false
。