JavaScript?雙位非運算(~~?操作符)使用場景實例探索
~~ 操作符簡介
在 JavaScript 中,~~
是雙位非(bitwise NOT)操作符的雙重使用。位非操作符 (~
) 將其操作數(shù)的所有位進行反轉(zhuǎn)(即,1 變成 0,0 變成 1)。當你連續(xù)使用兩次(如 ~~
),它會再次反轉(zhuǎn)這些位,從而實際上返回原始值。
在給定表達式~foo
的情況下,其最終的效果是-(foo + 1)
。因此雙位非操作~~foo
將導致-(-(foo + 1) + 1)
。這只適用于整數(shù),給定所有可能的操作數(shù),與~~
等價的真實的表達式可能是下面這樣的,但真實的內(nèi)部計算肯定不是這樣:
typeof foo === 'number' && !isNaN(foo) && foo !== Infinity ? foo > 0 ? Math.floor(foo) : Math.ceil(foo) : 0;
下面是一些雙位非運算的例子:
~~null; // => 0 ~~undefined; // => 0 ~~0; // => 0 ~~{}; // => 0 ~~[]; // => 0 ~~(1/0); // => 0 ~~false; // => 0 ~~true; // => 1 ~~1.2543; // => 1 ~~4.9; // => 4 ~~(-2.999); // => -2
當你正在處理正數(shù),~~
的功能使其成為 Math.floor
的更好替代方案,雖然它的可讀性不太好,但它速度更快且占用的字符更少。
應用場景
將浮點數(shù)轉(zhuǎn)換為整數(shù):
~~
可以用于快速將浮點數(shù)轉(zhuǎn)換為整數(shù)。這種轉(zhuǎn)換類似于Math.floor()
,但更簡潔且在某些情況下性能更高。- 示例:
~~4.9
結(jié)果是4
。
處理非數(shù)值:
- 當對非數(shù)值(如字符串)使用
~~
時,JavaScript 會首先嘗試將其轉(zhuǎn)換為數(shù)字。如果轉(zhuǎn)換失敗,則結(jié)果為0
。 - 示例:
~~"hello"
結(jié)果是0
。
- 當對非數(shù)值(如字符串)使用
數(shù)據(jù)清潔和驗證:
- 在處理用戶輸入或不確定的數(shù)據(jù)時,
~~
可以確保你最終得到一個整數(shù),或者在無法轉(zhuǎn)換的情況下得到0
。
- 在處理用戶輸入或不確定的數(shù)據(jù)時,
性能優(yōu)化:
- 在一些性能敏感的應用中,
~~
作為一種快速的整數(shù)轉(zhuǎn)換方法,可以提供比標準方法更快的性能。
- 在一些性能敏感的應用中,
結(jié)論
~~
運算符方法執(zhí)行很快,當你執(zhí)行數(shù)百萬這樣的操作非常適用,速度明顯優(yōu)于其他方法,但是代碼的可讀性比較差。還有一個需要要注意的地方,按位雙非運算符方法僅適用于32位整數(shù),即(2**31)-1 = 2147483647
。所以對于任何高于2147483647
的數(shù)字,按位運算符(~~
)都會給出錯誤的結(jié)果,所以在這種情況下建議使用Math.floor()
以上就是JavaScript 雙位非運算(~~ 操作符)使用場景實例探索的詳細內(nèi)容,更多關(guān)于JavaScript雙位非運算的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
iframe里使用JavaScript控制主頁轉(zhuǎn)向的方法
這篇文章主要介紹了iframe里使用JavaScript控制主頁轉(zhuǎn)向的方法,涉及使用javascript實現(xiàn)iframe頁面跳轉(zhuǎn)的技巧,需要的朋友可以參考下2015-04-04基于touch.js手勢庫+zepto.js插件開發(fā)圖片查看器(滑動、縮放、雙擊縮放)
這篇文章主要為大家詳細介紹了touch.js手勢庫結(jié)合zepto.js插件開發(fā)圖片查看器,圖片可以實現(xiàn)滑動、縮放、雙擊縮放等效果,2016-11-11使用phantomjs進行網(wǎng)頁抓取的實現(xiàn)代碼
這篇文章主要介紹了使用phantomjs進行網(wǎng)頁抓取的實現(xiàn)代碼,需要的朋友可以參考下2014-09-09layer的prompt彈出框,點擊回車,觸發(fā)確定事件的方法
今天小編就為大家分享一篇layer的prompt彈出框,點擊回車,觸發(fā)確定事件的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09精通Javascript系列之數(shù)據(jù)類型 字符串
下面先講一下字符串String字符串由零個或者多個字符構(gòu)成。字符可以包括字母、數(shù)字、標點符號和空格。2011-06-06