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