2012-01-01 84 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

相關問題