!!(新号码(0))== true,但!!(号码(0))== false,为什么?

时间:2012-09-30 03:38:40

标签: javascript casting comparison boolean-operations

为什么后两种行为有所不同(在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;

换句话说,如果使用new关键字调用NumberString(例如Array()new Array()的工作方式相同),为什么转换为布尔值不同?

另外,奖金问题。为什么'' == 0?我希望这种比较能够隐式地将0转换为'0',因为它会是扩展转换,而在比较之前将两者都转换为布尔值缩小< / em>转换。

2 个答案:

答案 0 :(得分:4)

  • new Number(0)会返回一个Number对象,无论其值如何都是真实的。因此,!!(true) == true
  • Number(0)会返回0号,这是假的:!!(false) == false

至于你的奖金问题,当你使用双等号时,''会被强制转换为整数。 parseInt('') == 0

答案 1 :(得分:0)

new为您提供了一个对象。因此比较。