最後の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
または呼び出された場合、ブール値へのキャストが異なるのはなぜですか(たとえば、同じように機能します)。String
Array()
new Array()
また、ボーナス質問。なぜ'' == 0
ですか?比較は、拡大0
変換であるため、暗黙的ににキャストすることを期待しますが、比較の前に両方をブール値にキャストすると、縮小変換になります。'0'