在 jQuery 中,我們經(jīng)常會看到!!!
這種三個嘆號的用法,它的作用是什么呢?
在 JavaScript 中,!!
用于將一個變量轉(zhuǎn)換為布爾值,其實就是將變量強(qiáng)制類型轉(zhuǎn)換為 boolean 類型。那么!!!
又有什么用呢?它其實就是將變量進(jìn)行兩次取反,相當(dāng)于兩次的布爾類型取反,最終返回的還是布爾類型。
舉個例子:
var test = 'hello world';
console.log(!!test); // true
console.log(!!!test); // false
我們可以看出來,!!'hello world'
的取反結(jié)果為 true,而!!!(!!'hello world')
的取反結(jié)果為 false。所以說,被三個嘆號包圍的表達(dá)式最終會被轉(zhuǎn)換為布爾類型。
那么,為什么會在 jQuery 中頻繁看到這種用法呢?其實這是因為在 jQuery 的源碼中,經(jīng)常需要判斷一個對象是否為假值(undefined,null,false,0,NaN,''),所以作者使用了!!!
來將變量強(qiáng)制類型轉(zhuǎn)換為布爾類型,而不是使用!!
,以節(jié)省代碼空間。
function isFalsy(obj) {
return !!!obj;
}
上面這段代碼是 jQuery 中用來判斷對象是否為假值的方法。
總結(jié)一下,!!!
就是將變量進(jìn)行兩次取反,最終返回的是布爾類型,而在 jQuery 中,它經(jīng)常被用來判斷一個對象是否為假值。