为什么最后两个行为不同(在 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'
,因为这将是一个扩大转换,而在比较之前将两者都转换为布尔值是一个缩小转换。