为什么最后两个行为不同(在 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()
),为什么转换为 bool 值会有所不同> 和 new Array()
工作方式相同)?
另外,还有一个额外问题。为什么'' == 0
?我希望比较将 0
隐式转换为 '0'
,因为这将是一个加宽转换,同时在比较是一种缩小转换。
最佳答案
new Number(0)
返回一个Number
对象,无论其值如何,该对象都是 true。因此,!!(true) == true
。Number(0)
返回数字0
,这是 falsey:!!(false) == false
对于您的奖励问题,当您使用双等号时,''
会转换为整数。 parseInt('') == 0
。
关于javascript - !!(new Number(0)) == true,但是 !!(Number(0)) == false,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12658423/