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


换句话说,如果使用新关键字调用NumberString时,为什么转换为布尔值会有所不同(例如,Array()new Array()的工作原理相同)?

另外,奖金问题。为什么是'' == 0?我希望比较会隐式地将0转换为'0',因为这将扩大转换范围,而在比较之前将两者都转换为布尔值是缩小转换范围。

最佳答案

new Number(0)返回一个Number对象,无论其值如何,该对象都是真实的。因此,!!(true) == true
Number(0)返回数字0,这是错误的:!!(false) == false


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

09-10 11:23
查看更多