先用一個簡單的例子說明:
復制代碼 代碼如下:
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 = !!inv;
// Go through the array, only saving the items
// that pass the validator function
for ( var i = 0, length = elems.length; i < length; i++ ) {
retVal = !!callback( elems[ i ], i );
if ( inv !== retVal ) {
ret.push( elems[ i ] );
}
}
return ret;
}
在使用grep函數的時候,如果給出了第三個參數且非null/undefined/0""/等值,則inv為true,否則為false。這樣做的目的就是保證inv和retVal的值都只能在true/false中取,而非其它值,為後續判斷提供便利。