欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一文詳細(xì)聊聊js新增基本類型BigInt

 更新時間:2024年06月22日 10:16:50   作者:小八是只白貓呀  
ES2020新增?一個基本類型BigInt,表示任意精度格式的整數(shù),無符號整數(shù)類型,存儲任意長度的整數(shù),這篇文章主要給大家介紹了關(guān)于js新增基本類型BigInt的相關(guān)資料,需要的朋友可以參考下

前言

BigInt是JavaScript中引入的一種新的基本數(shù)據(jù)類型,主要用于表示任意精度格式的整數(shù)。它可以安全地存儲和操作大整數(shù),即使這個數(shù)已經(jīng)超出了Number類型能夠表示的安全整數(shù)范圍。

在 JavaScript 中,普通的數(shù)字(Number 類型)是基于 IEEE 754 雙精度浮點數(shù)格式存儲的,這導(dǎo)致它們只能安全地表示 -9007199254740991(即 -(2^53 - 1))到 9007199254740991(即 2^53 - 1)之間的整數(shù)。超出這個范圍的整數(shù)在表示時可能會失去精度。因此,BigInt解決了之前Number整數(shù)溢出的問題。

它允許你表示和操作大于 2^53 - 1 的整數(shù),而且不會丟失精度。BigInt 是一種內(nèi)置對象,不是一種特殊的數(shù)字字面量語法。你可以使用 BigInt() 函數(shù)將一個整數(shù)或字符串轉(zhuǎn)換成 BigInt,或者在數(shù)字字面量后面添加 n 后綴來創(chuàng)建 BigInt。

一、BigInt特性

1.無符號與任意長度

BigInt是一種無符號整數(shù)類型,可以存儲任意長度的整數(shù)。它通常使用64位或128位來表示,但實際上并不受限于特定的位數(shù)。這使得BigInt能夠存儲比普通整數(shù)類型大得多的數(shù)字,例如超過10的100次方的數(shù)字。

2.運算支持

BigInt支持常見的數(shù)學(xué)運算,包括加法、減法、乘法和除法等。這些運算可以在BigInt值之間進行(這是重點,不同類型運算,會損失精度),而不會導(dǎo)致精度損失或溢出。

3.類型轉(zhuǎn)換

當(dāng)需要將BigInt與普通數(shù)字(Number類型)進行交互時,需要進行顯式的類型轉(zhuǎn)換。這是因為BigInt和普通數(shù)字是兩種不同類型的值,不能直接混合使用。

4.應(yīng)用場景廣泛

由于BigInt能夠處理大整數(shù),它在計算機科學(xué)中的應(yīng)用非常廣泛。例如,在密碼學(xué)中,它可以用于生成加密密鑰;在大數(shù)據(jù)分析中,它可以用于處理大量的數(shù)據(jù);在自然數(shù)值域、金額和貨幣、計數(shù)器、標(biāo)識符以及時間戳等場景中,BigInt也都有著重要的應(yīng)用,也為前端技術(shù)應(yīng)用的邊界做出了延伸貢獻。

二、BigInt的使用

1.創(chuàng)建 BigInt

代碼如下(示例):

const bigInt1 = BigInt("12345678901234567890"); // 使用字符串創(chuàng)建 BigInt  
const bigInt2 = 12345678901234567890n; // 使用數(shù)字字面量后綴 n 創(chuàng)建 BigInt

2.BigInt 運算

BigInt 支持加(+)、減(-)、乘(*)、除(/)、取模(%)等基本運算,也支持位運算(如按位與 &、按位或 |、按位異或 ^ 等):

const sum = BigInt(12345678901234567890) + BigInt(98765432109876543210);  
//console.log(sum)   111111111011111110656n
const diff = BigInt(12345678901234567890) - BigInt(98765432109876543210);  
//console.log(diff)  -86419753208641976320n
const product = BigInt(12345678901234567890) * BigInt(98765432109876543210);
//console.log(product) 1219326311370217884360920552323609001984n

對于除法運算,需要注意的是,BigInt 的除法運算會返回一個 BigInt 類型的商,任何小數(shù)部分都會被舍棄。如果需要獲取余數(shù),你可以使用 % 運算符。:

const sum = BigInt(12345678901234567890) + BigInt(98765432109876543210);  
//console.log(sum)   111111111011111110656n
const diff = BigInt(12345678901234567890) - BigInt(98765432109876543210);  
//console.log(diff)  -86419753208641976320n
const product = BigInt(12345678901234567890) * BigInt(98765432109876543210);
//console.log(product) 1219326311370217884360920552323609001984n

3.與普通數(shù)字的交互

BigInt 和普通數(shù)字(Number 類型)是兩種不同類型的值,因此不能直接進行混合運算。如果嘗試這樣做,JavaScript 會拋出一個錯誤。你可以使用 BigInt() 或字面量后綴 n 來顯式轉(zhuǎn)換類型:

const regularNumber = 123;  
const bigNumber = BigInt(123);  
  
// 錯誤的用法,會拋出 TypeError  
// const result = regularNumber + bigNumber;  
//Uncaught TypeError: Cannot mix BigInt and other types, use explicit conversions at <anonymous>:1:30
  
// 正確的用法,顯式轉(zhuǎn)換類型  
const result = BigInt(regularNumber) + bigNumber;
//console.log(result)
// 246n

4.比較操作

你可以使用比較運算符(如 >、<、==、!=、>=、<=)來比較 BigInt 值。不過,與普通數(shù)字進行比較時,至少保證一個數(shù)字是BigInt 類型:

const bigInt1 = BigInt(123);  
const bigInt2 = BigInt(456);  
const regularNumber = 789;  
  
console.log(bigInt1 < bigInt2); // true  
console.log(bigInt1 < BigInt(regularNumber)); // true  
 console.log(bigInt1 < regularNumber); // true,這里理論上應(yīng)該報錯,實際不會報錯,因為是js機制的隱式轉(zhuǎn)換,只限于比較

bigInt1 < regularNumber,這里理論上應(yīng)該報錯,實際不會報錯,因為js機制的隱式轉(zhuǎn)換(這里就不贅述了,已有太多資料可以查詢),只限于比較,小伙伴可以試驗下,親試如此。

補充:使用BigInt時的注意點 

使用大數(shù)時需要注意:

  1. BigInt類型不能和內(nèi)置函數(shù)Math共同使用
  2. BigInt不能和number類型進行運算, 只能和同為BigInt的數(shù)字進行運算
  3. BigInt可以和number進行比較
  4. BigInt不能轉(zhuǎn)小數(shù), 只能轉(zhuǎn)整數(shù), 遇到不是數(shù)字的情況(布爾值或者[] )內(nèi)部應(yīng)該會嘗試先將其轉(zhuǎn)為數(shù)字

 驗證例子1: n1為bigint, n2為數(shù)字, 使用Math.pow()函數(shù)來求兩者的平方

    const n1 = 10n;
    try {
      console.log(Math.pow(n1, 2));
    } catch (error) {
      console.log(error);
    }
    const n2 = 10;
    console.log(Math.pow(n2, 2));

可以看到確實大數(shù)不能和math相關(guān)函數(shù)配合使用

 驗證例子2: 使用大數(shù)和number進行運算和比較

    const n1 = 10n;
    const n2 = 20;
    try {
      console.log(n1 + n2);
    } catch (error) {
      console.log(error);
    }
    console.log(n1 + BigInt(n2));
    console.log(n1 > n2);

結(jié)果大數(shù)不能和number進行運算, 可以和number進行比較

驗證例子3: BigInt不能轉(zhuǎn)小數(shù)

    try {
      console.log(BigInt(22.22));
    } catch (error) {
      console.log(error);
    }

 報錯內(nèi)容大概是不能轉(zhuǎn)換成bigint因為他不是個整數(shù)

總結(jié)

1、BigInt 類型的值不能和普通數(shù)字混合使用,除非進行顯式的類型轉(zhuǎn)換(比較是例外)。

2、BigInt 不支持一些 Number 類型的方法,如 Math 對象中的大多數(shù)函數(shù)。你需要尋找適合 BigInt 的替代方案。

3、并非所有環(huán)境都支持 BigInt。確保你的代碼運行在支持 BigInt 的 JavaScript 引擎中。

4、BigInt 的引入使得 JavaScript 在處理大整數(shù)時更加靈活和強大,特別是在需要精確表示和計算大整數(shù)的場景中,如加密、科學(xué)計算等。

到此這篇關(guān)于js新增基本類型BigInt的文章就介紹到這了,更多相關(guān)js新增基本類型BigInt內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論