先看下面的脚本,预测下结果
1 | var flag = true; |
在 jslint中明确提示 new Boolean(true);do not use Boolean as a constructor. (W053)jshint(W053)
接下来的例子
1 | if(flag){ |
结果如下
1 | true is true |
修改脚本:
1 | var flag = true; |
结果竟然显示:
1 | Object Boolean is true |
后来查阅资料发现,
JavaScript的其他数据类型都可以转换成Boolean类型,注意!!!只有这几种类型会转换为false
1 | undefined |
其他都转化为true,包括空对象{},空数组[] , 负数 ,false的对象包装等。
1 | if(-1){ |
new Boolean(false)是布尔值的包装对象 typeof (new Boolean(false)) // ‘object’ ,所以 转换为boolean是true,而不是false。
从另一个层面也证明了为啥jslint
禁止在构造方法里使用Boolean类型的数据。
后记
Boolean.valueOf() 可以返回Boolean对象对应的值类型
1 | /**/ |
补充
对于数字0
连续使用两次!! 仍旧返回false.
1 | var fa = Boolean(0); |