JavaScript中的运算符大体分为:算术运算符、比较运算符、布尔运算符、二进制运算符。运算符都比较基础,今天只讲布尔运算符中的!!运算符。
!!运算符用语言描述就是:取反再取反。单看一个!就是对一个值做取反运算。在所有的JavaScript值中除了以下六个值做 ! 运算后是true外其他所有的值做 ! 运算后都是false:
1、undefined
2、null
3、Nan
4、0
5、false
6、" "(空字符串)
var a = undefined;
var b = null;
var c = "";
var d = 0;
var e = NaN;
var f = false;
console.log((!a));//输出true
console.log((!b));//输出true
console.log((!c));//输出true
console.log((!d));//输出true
console.log((!e));//输出true
console.log((!f));//输出true
单个 ! 是对值取反 如果在加一个 ! 就是对取反后的值再取反:原来取反后是true再次取反后就变为了false:
var a = undefined;
var b = null;
var c = "";
var d = 0;
var e = NaN;
var f = false;
console.log((!!a));//输出false
console.log((!!b));//输出false
console.log((!!c));//输出false
console.log((!!d));//输出false
console.log((!!e));//输出false
console.log((!!f));//输出false
所以我们经常看到的 !! 其实说白了就是判断一个值是否是一个有效值 既是不是true 也就是判断一个是不是上面六个值,如果不用 !! 我们需要一个一个的去判断会造成代码臃肿:
if (a != undefined && a != null && a != "" && a != 0 && a != NaN && a != false) {
console.log(a);
}
//上面代码就显得很臃肿 对于这种直接用 !! 就可以实现:
if(!!a){
console.log(a);
}
学过Java的就会发现JavaScript中 !! 运算符比较类似于Java中的TextUtils.isEmpty();