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

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

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

前言

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

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

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

一、BigInt特性

1.無符號(hào)與任意長度

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

2.運(yùn)算支持

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

3.類型轉(zhuǎn)換

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

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

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

二、BigInt的使用

1.創(chuàng)建 BigInt

代碼如下(示例):

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

2.BigInt 運(yùn)算

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

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

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

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 類型)是兩種不同類型的值,因此不能直接進(jìn)行混合運(yùn)算。如果嘗試這樣做,JavaScript 會(huì)拋出一個(gè)錯(cuò)誤。你可以使用 BigInt() 或字面量后綴 n 來顯式轉(zhuǎn)換類型:

const regularNumber = 123;  
const bigNumber = BigInt(123);  
  
// 錯(cuò)誤的用法,會(huì)拋出 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.比較操作

你可以使用比較運(yùn)算符(如 >、<、==、!=、>=、<=)來比較 BigInt 值。不過,與普通數(shù)字進(jìn)行比較時(shí),至少保證一個(gè)數(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)該報(bào)錯(cuò),實(shí)際不會(huì)報(bào)錯(cuò),因?yàn)槭莏s機(jī)制的隱式轉(zhuǎn)換,只限于比較

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

補(bǔ)充:使用BigInt時(shí)的注意點(diǎn) 

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

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

 驗(yàn)證例子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í)大數(shù)不能和math相關(guān)函數(shù)配合使用

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

    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進(jìn)行運(yùn)算, 可以和number進(jìn)行比較

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

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

 報(bào)錯(cuò)內(nèi)容大概是不能轉(zhuǎn)換成bigint因?yàn)樗皇莻€(gè)整數(shù)

總結(jié)

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

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

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

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

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

相關(guān)文章

最新評(píng)論