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;

换句话说,如果使用 new 关键字调用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 回答