javascript - !!(new Number(0)) == true,但是 !!(Number(0)) == false,为什么?

标签 javascript casting comparison boolean-operations

为什么最后两个行为不同(在 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 关键字调用 NumberString (例如,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/

相关文章:

检查 double 是否等于 -0.00

javascript - Ajax 请求将卡住我的 Javascript 代码

c++ - 由于从 C 到 C++ 的类型转换,无法编译并出现错误 C2440

c++ - 如何在 C++ 中将 void * 转换为 float (*)[3]?

c# - Generic Cast,将 int 转换为 double 是不可能的

sorting - Common Lisp 中的字符比较

javascript - jquery 在两个按钮之间切换

javascript - 如何找出访问者的 RAM 和 GPU 信息?

javascript - 有没有办法将 JSValue 移动到新的 JSContext 中而忽略其原始上下文?

python - django:在 pypy、psycho、unladen swallow 或 python 上,哪个最快?