JavaScript中会经常遇到一个操作符:!
这是一个布尔操作符,用于将操作的值强制转换为布尔值并取反。常用场景如下:
//条件判断中使用
var a;
var b=null; if(!a){
console.log("a是假的");
} if(!b){
console.log("b是假的");
} //操作布尔值
var c = false;
var d = !c;//d === true; //IIFE(自执行函数、立即执行函数:Immediately-Invoked Function Expression)
!function(){
console.log("IIFE");
}(); //转换值类型
var e=100;
var f='pelli';
var g='';
var h=0;
console.log(!!e);//true;
console.log(!!f);//true;
console.log(!!g);//false;
console.log(!!h);//false;
现在来说一说这四种常见的场景中感叹号的作用。"!"
1.条件判断中使用和操作布尔值【取反】
JavaScript中,感叹号本来就是取反的意思。比如a===false;则!a===true;
简单来说,感叹号可以把对的(true)变成错的(false),真的(true)变成假的(false)
!true===false;
!"hello"===false;
!0===true;
!""===true;
2.双感叹号用于转换值类型【强制转换为布尔值】
感叹号在取反之前会先将数据类型转换为布尔类型,所以用感叹号操作后的值,结果一定是布尔值,只有两个,要么true,要么false。
一个感叹号取反,两个感叹号就是取反后再取反,就和我们说的负负得正差不多是一个意思。
由于是两个感叹号写在一起,可能会造成懵懂,这样写就会明白。
var a='abcd';
a=!(!a);//true !!a===!(!a);
3.自执行函数中使用
!!function(){
//function codes here
}();
自执行函数的写法有很多种,如下也都可以:
+function(){
//code
}(); -function(){
//code
}(); ~function(){
//code
}(); (function(){
//code
})(); (function(){
//code
}());
其实这里的感叹号也好,加号也好,只是用了运算符优先级的这一特性,因为这几个运算符在JavaScript中优先级最高,会将紧紧相邻的js语句计算出结果,在计算的过程中,就会执行定义的匿名函数,就达到了自执行的效果。
总结:感叹号在js中有两个作用:
1.取反
2.将值转换为布尔值:true或false。