2012-01-01 27 views
26

the jQuery documentation JavaScript的类型时,转换为布尔值(即主题不相关的这个问题,但是,我发现它的代码只是)自带的描述字符串的行为,这个代码片段前三个例子,但我没有得到最后一个例子,这是因为:为什么!new Boolean(false)在JavaScript中等于false?</p> <pre><code>!"" // true !"hello" // false !"true" // false !new Boolean(false) // false </code></pre> <p>我得到:

new Boolean(false) == false //true 
!false // true 

所以我会假设:

!new Boolean(false) // true 

但是相反:

new Boolean(false) === false // false 

如果是这样,这起什么作用:

!new Boolean(false) // false, mind = blown 

这是什么我也不...

是不是因为是?

+1

对于深入分析的问题+1。 – Praveen 2013-08-06 04:13:07

回答

24

new Boolean(false)返回一个对象它不为空。非空对象总是真的。

因此,任何非空对象的!将始终为假。


要证明给自己,你可以在你的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" 
8

因为new Boolean返回对象as stated here

!定义as follows

11.4.9逻辑非运算符(!

生产UnaryExpression!UnaryExpression如下评价:

  1. 表达式是评估结果一元表达式

  2. oldValueToBoolean(GetValue(expr))

  3. 如果oldValuetrue,返回false

  4. 返回true

and: - ToBoolean换算

表11:

9.2 ToBoolean

的抽象操作ToBoolean根据表11其参数转换为布尔类型的值

Argum ENT类型 - 结果

...

对象 - true

所以,这是一个对象,从而ToBoolean返回true,因此!回报false

相关问题