JavaScript中为什么需要!!?
1. 布尔值为false的值
在JavaScript中,布尔值为 false
的值有如下几个:
undefined
null
false
0
NaN
""
或''
(空字符串)
2. !!的作用
将上述值与 false
作比较。
console.log(undefined==false); // false
console.log(null==false); // false
console.log(false==false); // true
console.log(0==false); // true
console.log(NaN==false); // false
console.log(""==false); // true
console.log(''==false); // true
发现 undefined==false
、null==false
和 NaN==false
的值均为 false
,如果加上 !!
,结果如下:
console.log(!!undefined==false); // true
console.log(!!null==false); // true
console.log(!!false==false); // true
console.log(!!0==false); // true
console.log(!!NaN==false); // true
console.log(!!""==false); // true
console.log(!!''==false); // true
事实上,!!
的作用是将值的类型强制转化为布尔类型。
3. 回顾条件判断语句
3.1 一个例子
var b = 0;
if(b){
console.log('true');
} else {
console.log('false'); // 执行这行代码
}
var b = 0;
if(b&&true){
console.log('true');
} else {
console.log('false'); // 执行这行代码
}
var b = 0;
if(!!b&&true){
console.log('true');
} else {
console.log('false'); // 执行这行代码
}
因此,if
语句的条件表达式会执行隐式类型转换。
3.2 另一个例子
function test(value){
return value && true;
}
console.log(test(0)); // 0
function test(value){
return !!value && true;
}
console.log(test(0)); // false
可以看到,!!
把 value
强制转化为布尔值。