为什么后两种行为有所不同(在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
或String
(例如Array()
和new Array()
的工作方式相同),为什么转换为布尔值不同?
另外,奖金问题。为什么'' == 0
?我希望这种比较能够隐式地将0
转换为'0'
,因为它会是扩展转换,而在比较之前将两者都转换为布尔值缩小< / em>转换。
答案 0 :(得分:4)
new Number(0)
会返回一个Number
对象,无论其值如何都是真实的。因此,!!(true) == true
。Number(0)
会返回0
号,这是假的:!!(false) == false
至于你的奖金问题,当你使用双等号时,''
会被强制转换为整数。 parseInt('') == 0
。
答案 1 :(得分:0)
new
为您提供了一个对象。因此比较。