为什么后两者的行为有所不同(在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'
,因为这将扩大转换范围,而在比较之前将两者都转换为布尔值是缩小转换范围。 最佳答案
new Number(0)
返回一个Number
对象,无论其值如何,该对象都是真实的。因此,!!(true) == true
。Number(0)
返回数字0
,这是错误的:!!(false) == false
至于您的奖金问题,当您使用双等号时,''
会强制转换为整数。 parseInt('') == 0
。