在javascript中有時會看到有兩個!!的用法
- var foo;
- alert(!foo);//undifined情況下,一個感嘆號返回的是true;
- alert(!goo);//null情況下,一個感嘆號返回的也是true;
- var o={flag:true};
- var test=!!o.flag;//等效於var test=o.flag||false;
- alert(test);
這段例子,演示了在undifined和null時,用一個感嘆號返回的都是true,用兩個感嘆號返回的就是false,所以兩個感嘆號的作用就在於,如果明確設置了變量的值(非null/undifined/0/""等值),結果就會根據變量的實際值來返回,如果沒有設置,結果就會返回false。
- 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;
- }
這是jquery中一個比較經典的例子,
在使用grep函數的時候,如果給出了第三個參數且非null/undefined/0""/等值,則inv為 true,否則為false。這樣做的目的就是保證inv和retVal的值都只能在true/false中取,而非其它值,為后續判斷提供便利。