首頁 >web前端 >js教程 >JavaScript中兩個感嘆號的作用

JavaScript中兩個感嘆號的作用

高洛峰
高洛峰原創
2016-11-28 10:49:131577瀏覽

var a;

var b=!!a;

a預設是undefined。 !a是true,!!a則是false,所以b的值是false,而不再是undefined,也非其它值,主要是為後續判斷提供便利。

!!一般用來將後面的表達式強制轉換為布林類型的資料(boolean),也就是只能是true或false;

因為javascript是弱型別的語言(變數沒有固定的資料型別)所以有時需要強制轉換為對應的類型,類似的如:

a=parseInt(“1234″)

a=”1234″-0 //轉換為數字

b=1234+”" //轉換為字元字串

c=someObject.toString() //將物件轉換為字串

其中第1種、第4種為明確轉換,2、3為隱式轉換

布林型的轉換,javascript約定規則為

false、undefinded、null、0、”" 為false

tru​​e、1、”somestring”、[Object] 為true

對null與undefined等其他用隱式轉換的值,用操作符時都會產生true的結果,所以用兩個感嘆號的作用就在於將這些值轉換為「等價」的布林值;

====================== ==================================================== =======================================

先用一個簡單的例子說明:
var o={flag:true};
var test=!!o.flag;//等效於var test=o.flag||false;
alert(test);
由於對null與undefined用!操作符時都會產生true的結果,所以用兩個感嘆號的作用就在於,如果明確設定了o中flag的值(非null/undefined/0""/等值),自然test就會取跟o.flag一樣的值;如果沒有設置,test就會預設為false,而不是null或undefined。
在jQuery中比較經典的例子如下:(jQuery 1.7.0.js: Line 748)
grep: function( elems, callback, inv ) {
var ret = [], retVal;
inv = !!

// Go through the array, only saving the items

// that pass the validator function
for ( var i = 0, length = elems.length; i retValback = !call i ], i );
if ( inv !== retVal ) {
ret.push( elems[ i ] );
}
}

return ret;

}
在使用grep函數的時候,如果給了第三個參數且非null/undefined/0""/等值,則inv為true,否則為false。這樣做的目的是確保inv和retVal的值都只能在true/false中取,而非其它值,為後續判斷提供便利。


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn