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。