JavaScriptでnew Boolean(false)がfalseになるのはなぜですか。

Why does !new Boolean(false) equals false in JavaScript?


質問 written by Michiel van Oosterhout @2012-01-01 20:32:01Z

: 28 : 2 : 3

JavaScriptの型に関するjQueryのドキュメントには、ブール値に変換されたときの文字列の動作を記述するコードの断片が含まれています(このトピックはこの質問に関連していませんが、コードを見つけたところだけです)。

!"" // true
!"hello" // false
!"true" // false
!new Boolean(false) // false

最初の3つの例は得られますが、最後の例は得られません。

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

だから私は仮定します:

!new Boolean(false) // true

代わりに:

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

これは何ですか私もしていません...

それはなぜですか?

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

もしそうなら、これはどのような目的に役立ちますか?

コメント 1

深く分析された質問に対して+1。

written by Praveen @2013-08-06 04:13:07Z

回答 1 written by Darth Egregious @2012-05-16 00:20:29Z
26

new Boolean(false)は、nullではないオブジェクトを返します。 null以外のオブジェクトは常に真実です。

その結果、 ! null以外のオブジェクトは、常にfalseになります。


あなた自身にそれを証明するために、あなたはあなたのJavaScriptコンソールでこれを実行することができます

(typeof new Boolean(false))  //"object"

また、 strict equality演算子を使用して、 new Boolean(false)が本当にfalseはないことを確認できfalse

Also, you can use the strict equality operator to confirm that new Boolean(false) isn't really false:

ちなみに、 Boolean関数を(新しい関数を使わずに)関数として呼び出すと、実際にはプリミティブが返されます。

new Boolean(false) === false  // false
回答 2 written by pimvdb @2012-01-01 20:35:48Z
8

new Booleanは、 ここで説明したようにオブジェクト返すためです

! 次のように定義されています

11.4.9論理否定演算子( !

本番UnaryExpression:! UnaryExpressionは次のように評価されます。

  1. UnaryExpressionを評価した結果をexprとする。

  2. oldValueToBoolean(GetValue(expr))ます。

  3. oldValuetruefalse返しfalse

  4. true返しtrue

そして

9.2 ToBoolean

抽象演算ToBooleanは、表11に従って、引数をBoolean型の値に変換します。

表11 - ToBoolean変換

引数のタイプ - 結果

...

オブジェクト - true

つまり、それはオブジェクトなので、 ToBooleantrue返しtrue ! false返しfalse