来自the jQuery documentation的JavaScript类型来自这段代码,用于描述转换为布尔值时字符串的行为(该主题与此问题无关,但它只是我找到代码的地方):
!"" // 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
如果是的话,这是为了什么目的?
答案 0 :(得分:26)
new Boolean(false)
会返回对象,该对象不为空。非null对象总是真实的。
因此,任何非null对象的!
将始终为false。
要向自己证明,您可以在javascript控制台中运行
(typeof new Boolean(false)) //"object"
此外,您可以使用strict equality
运算符确认new Boolean(false)
不是false
:
new Boolean(false) === false // false
顺便说一下,将Boolean
函数作为函数调用 - 没有new - 实际上会返回一个原语
!Boolean(false) // true
(typeof Boolean(false)) //"boolean"
答案 1 :(得分:8)
因为new Boolean
会返回一个对象as stated here。
!
定义为as follows:
11.4.9逻辑NOT运算符(
!
)生产 UnaryExpression :
!
UnaryExpression 评估如下:
让 expr 成为评估 UnaryExpression 的结果。
让 oldValue 成为
ToBoolean(GetValue(expr))
。如果 oldValue 为
true
,请返回false
。- 醇>
返回
true
。
and:
9.2 ToBoolean
抽象操作ToBoolean根据表11将其参数转换为Boolean类型的值:
表11 - ToBoolean Conversions
参数类型 - 结果
...
对象 -
true
因此,它是一个对象,因此ToBoolean
会返回true
,因此!
会返回false
。