2

最後の2つが異なる動作をするのはなぜですか(Google Chromeのコンソールでテスト済み)?

               /* number */                       /* string */
         0               == false;         ''               == false;
         !!0             == false;         !!''             == false;
         Number(0)       == false;         String('')       == false;
         !!Number(0)     == false;         !!String('')     == false;
         new Number(0)   == false;         new String('')   == false;
         (new Number(0)) == false;         (new String('')) == false;
         !!new Number(0) == true;          !!new String('') == true;

言い換えると、新しいキーワードで呼び出された場合、Numberまたは呼び出された場合、ブール値へのキャストが異なるのはなぜですか(たとえば、同じように機能します)。StringArray()new Array()

また、ボーナス質問。なぜ'' == 0ですか?比較は、拡大0変換であるため、暗黙的ににキャストすることを期待しますが、比較の前に両方をブール値にキャストすると、縮小変換になります。'0'

4

2 に答える 2

4
  • new Number(0)オブジェクトを返しNumberます。これは、その値に関係なく真実です。したがって、!!(true) == true
  • Number(0)数値を返しますが0、これは誤りです。!!(false) == false

ボーナスの質問について''は、二重等号を使用すると整数にキャストされます。parseInt('') == 0

于 2012-09-30T03:43:04.550 に答える
0

newあなたにオブジェクトを与えます。したがって、比較。

于 2012-09-30T03:42:44.440 に答える