日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
面試官:聊聊BigInt?

BigInt 是什么?

概念

我們知道 JavaScript 中 Number 類型最大的數(shù)值為 2^53- 1,也就是 Number.MAX_SAFE_INTEGER。

成都創(chuàng)新互聯(lián)公司始終堅持【策劃先行,效果至上】的經(jīng)營理念,通過多達十載累計超上千家客戶的網(wǎng)站建設(shè)總結(jié)了一套系統(tǒng)有效的全網(wǎng)整合營銷推廣解決方案,現(xiàn)已廣泛運用于各行各業(yè)的客戶,其中包括:成都OPP膠袋等企業(yè),備受客戶表揚。

BigInt 是一種內(nèi)置對象,它提供了一種方法來表示大于 2^53 - 1 的整數(shù)。也就是說,BigInt 可以表示任意大的整數(shù)。

聲明

可以在一個整數(shù)字面量后面加上 n 或者調(diào)用函數(shù) BigInt() 定義一個 BigInt。如下:

const theBiggestInt = 9007199254740991n;
const alsoHuge = BigInt(9007199254740991);
// ? 9007199254740991n

類型檢測

typeof 檢測 BigInt 對象返回 bigint 字符串。

typeof 1n === 'bigint'; // truetypeof BigInt('1') === 'bigint'; // true

BigInt 基礎(chǔ)語法和注意點

BigInt 很多時候表現(xiàn)跟 Number 類型很像,但也有很多不同的點,這些點在用到 BigInt 類型的時候,需要思考以下的點:

運算:

語法點

支持度

備注

+、*、-、**、%

支持

/

不支持

會進行向下取整

單目 (+) 運算符

不支持

>>>(無符號右移)

不支持

因為 BigInt 都是有符號的

位運算(除了無符號右移)

支持

Math 對象方法

不支持

說明:

  • 除法的時候,當使用 BigInt 時,帶小數(shù)的運算會被取整
const expected = 4n / 2n;
// ? 2n

const rounded = 5n / 2n;
// ? 2n, not 2.5n
  • 與 Number 混合運算的話。必須轉(zhuǎn)換成同一種類型,有時候會造成精度丟失的問題,所以不建議這么使用
  • 在對象中使用 BigInt 的時候,假如使用 JSON.stringify() 會發(fā)生類型錯誤(TypeError)

綜上所述,可以看到 BigInt 的使用需要注意的點還是非常多的,并且在和 Number 類型轉(zhuǎn)換的時候還會發(fā)生精度丟失問題,因而建議僅在值可能大于2^53 時使用 BigInt 類型。

那么 BigInt 現(xiàn)在有哪些應(yīng)用場景呢?

BigInt 的應(yīng)用場景

高精度時間戳

大于 2^53 - 1 的整數(shù)的一個應(yīng)用場景就是高精度時間戳。精確到納秒級別的時間戳很常見,經(jīng)常用來記錄特定程序的執(zhí)行事件,以便進行性能分析,BigInt 可以表示高精度時間戳,在后端性能分析、性能調(diào)優(yōu)中發(fā)揮作用。

大整數(shù) ID

比如 Twitter 的 id 生成服務(wù),當 id 持續(xù)增長時,就會超出 JS 的安全范圍,因此要求同時冗余地返回字符串型的 id。假如有 BigInt 類型就可以直接使用。

兼容性 & PolyFill

can i use[1] 中的數(shù)據(jù)顯示,Chrome 的支持度會好很多,IE 全軍覆沒,整體覆蓋 92.25% 的用戶。

現(xiàn)在可以使用 JSBI — pure-JavaScript BigInts[2] 這個庫來實現(xiàn) BigInt。JSBI 是直接使用了 V8 和 Chrome 中 BigInt 的設(shè)計和實現(xiàn)方式,功能與瀏覽器中一致,語法稍有不同。假如 BigInt 被所有的瀏覽器原生支持后,可以使用 babel 插件 babel-plugin-transform-jsbi-to-bigint[3] 移除 JSBI 轉(zhuǎn)為原生的 BigInt 語法。

總結(jié)

總體而言,BigInt 可以表示任意大的整數(shù),目前的使用場景是相對較少的。BigInt 的使用需要注意的點還是非常多的,因而建議僅在值可能大于2^53 時使用 BigInt 類型。目前的兼容性一般,可以考慮使用 jsbi 這個庫替代。

參考

JSBI — pure-JavaScript BigInts[4]

BigInt-MDN[5]

參考資料

[1]can i use: https://caniuse.com/?search=bigint

[2]JSBI — pure-JavaScript BigInts: https://github.com/GoogleChromeLabs/jsbi

[3]babel-plugin-transform-jsbi-to-bigint: https://github.com/GoogleChromeLabs/babel-plugin-transform-jsbi-to-bigint

[4]JSBI — pure-JavaScript BigInts: https://github.com/GoogleChromeLabs/jsbi

[5]BigInt-MDN: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/BigInt


網(wǎng)頁名稱:面試官:聊聊BigInt?
URL網(wǎng)址:http://www.5511xx.com/article/coisoii.html