亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JavaScript?雙位非運算(~~?操作符)使用場景實例探索

 更新時間:2024年01月23日 08:42:42   作者:南城FE  
本文為大家介紹JavaScript中雙位非運算?~~,?~~?操作符是一個強大且經(jīng)常被忽視的特性,它提供了一種快速、簡潔的方式來處理數(shù)字和執(zhí)行類型轉(zhuǎn)換,通??梢员挥糜跀?shù)學計算和類型轉(zhuǎn)換,我們先了解一下?~~?的基本概念和它的一些應用場景

~~ 操作符簡介

在 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ù)據(jù)清潔和驗證

    • 在處理用戶輸入或不確定的數(shù)據(jù)時,~~ 可以確保你最終得到一個整數(shù),或者在無法轉(zhuǎn)換的情況下得到 0
  • 性能優(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)文章

最新評論