1:!可将变量转换成boolean类型,null、undefined和空字符串取反都为true。
var a = null;
if(a){
console.log(1);
}else{
console.log(2);
}
//输出:2
if(!a){
console.log(1);
}else{
console.log(2);
}
//输出:1
2:!!常常用来做类型判断,在第一步!之后再做逻辑取反运算,在js中新手常常会写这样臃肿的代码:判断变量a为非空、未定义或者非空串才能执行方法体的内容。
var a;
if(a != null && a != undefined && a != ''){
console.log(1);
}else{
console.log(2);
}
//输出:2
实际上我们只需要写一个判断表达式:
if(!!a){
console.log(1);
}else{
console.log(2);
}
//输出:2
可以总结出来,“!”是逻辑与运算,并且可以与任何变量进行逻辑与将其转化为布尔值,“!!”则是逻辑与的取反运算,尤其后者在判断类型时代码简洁高效,省去了多次判断null、undefined和空字符串的冗余代码。
if (!!item.value) {
param[item.name] = item.value;
}
上面的代码中,!!value , 先将value转成取反的布尔值,将得到的布尔值再次取反,保证value的值为null,undefined和空字符串的情况下,if体中的代码不会执行。