基本类型的布尔值 true、false 和 值为 true、 false 的 Boolean 对象是不同的
1 var b = undefined 2 3 var base_b = Boolean(b); 4 console.log(base_b); 5 // false 6 console.log(typeof base_b); 7 // boolean 8 9 var obj_b = new Boolean(b); 10 console.log(obj_b); 11 // Boolean {false} 12 console.log(typeof obj_b); 13 // object 14 15 if(base_b){ 16 // 这里的代码 不 会执行 17 } 18 19 if(obj_b){ 20 // 这里的代码 会 执行, obj_b 是个非 null 的对象 21 }
基本类型
0 -0 NaN false null ''(空字符串) undefined 被转化为布尔值时,皆为 false
[] {} 空数组,空对象 都是 true, 除去上行 false 的情况,皆 true
Boolean 对象
var b = new Boolean()
不传值,或者 0 -0 NaN false null '' undefined 会得到 Boolean{ false }, 即值为 false 的Boolean对象
任何不是 null 和 undefined 的对象都会被当做 true 来处理, 即使是 值为 false 的 Boolean 对象
!
var b = 'hello world';
console.log( !b ) // false
! 的作用是,将 b 转为布尔值,并取反
结合上文,当 b 是 0 -0 NaN false null ''(空字符串) undefined 时,!b 是 true
!!
var b = 'hello world'
console.log( !!b ) // true
在 ! 的基础上再次取反(!),其实相当于只是强转为 布尔值.. 等价于 Boolean(b),写法上更简洁
结合上文,当 b 不是 0 -0 NaN false null ''(空字符串) undefined 时,!!b 是 true
我自己的感觉,!! 是道保险,保证这个值是布尔值。其实如果是写在条件语句中的话,会默认进行隐式类型转换,与不加 !! 效果应该是一样的
如有错误,望指正