日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【ES11(2020)】新增数据类型 BigInt

發布時間:2025/3/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【ES11(2020)】新增数据类型 BigInt 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在 ES10 增加了新的原始數據類型:BigInt,表示一個任意精度的整數,可以表示超長數據,可以超出2的53次方。

Js 中 Number類型只能安全的表示-(2^53-1) 至 2^53-1范的值。

可以用在一個整數字面量后面加 n的方式定義一個 BigInt ,如:10n,或者調用函數BigInt()。

const theBiggestInt = 9007199254740991n;const alsoHuge = BigInt(9007199254740991); // 9007199254740991nconst hugeString = BigInt("9007199254740991"); // 9007199254740991nconst hugeHex = BigInt("0x1fffffffffffff"); // 9007199254740991nconst hugeBin = BigInt("0b11111111111111111111111111111111111111111111111111111"); // 9007199254740991n

它在某些方面類似于 Number ,但是也有幾個關鍵的不同點:

  • 不能用于 Math 對象中的方法;
  • 不能和任何 Number實例混合運算,兩者必須轉換成同一種類型。在兩種類型來回轉換時要小心,因為 BigInt 變量在轉換成 Number 變量時可能會丟失精度。
typeof 1n === 'bigint'; // true typeof BigInt('1') === 'bigint'; // true// 使用 Object 包裝后, BigInt 被認為是一個普通 "object" : typeof Object(1n) === 'object'; // true

運算

以下操作符可以和BigInt 一起使用:
+、*、-、**、%

除 >>>(無符號右移)之外的 位操作 也可以支持。因為 BigInt 都是有符號的, >>> (無符號右移)不能用于 BigInt。
為了兼容 asm.js ,BigInt 不支持單目 (+) 運算符。

const previousMaxSafe = BigInt(Number.MAX_SAFE_INTEGER); // 9007199254740991nconst maxPlusOne = previousMaxSafe + 1n; // 9007199254740992nconst theFuture = previousMaxSafe + 2n; // 9007199254740993n, this works now!const multi = previousMaxSafe * 2n; // 18014398509481982nconst subtr = multi – 10n; // 18014398509481972nconst mod = multi % 10n; // 2nconst bigN = 2n ** 54n; // 18014398509481984nbigN * -1n // –18014398509481984n

/ 操作符對于整數的運算也沒問題。可是因為這些變量是BigInt而不是 BigDecimal,該操作符結果會向零取整,也就是說`不會返回小數部分。

當使用 BigInt 時,帶小數的運算會被取整。

const expected = 4n / 2n; // 2nconst rounded = 5n / 2n; // 2n 不是2.5n

BigInt 和 Number 比較

BigInt和 Number 不是嚴格相等的,但是寬松相等的。

0n === 0 // false0n == 0 // true

Number和BigInt 可以進行比較

1n < 2 // true2n > 1 // true2 > 2 // false2n > 2 // false2n >= 2 // true

兩者也可以混在一個數組內并排序。

const mixed = [4n, 6, -12n, 10, 4, 0, 0n]; // [4n, 6, -12n, 10, 4, 0, 0n]mixed.sort(); // [-12n, 0, 0n, 10, 4n, 4, 6]

靜態方法
BigInt.asIntN() 將 BigInt 值轉換為一個 -2width-1 與 2width-1-1 之間的有符號整數。

BigInt.asUintN() 將一個 BigInt 值轉換為 0 與 2width-1 之間的無符號整數。

實例方法
BigInt.prototype.toLocaleString() 返回此數字的 language-sensitive 形式的字符串。覆蓋 Object.prototype.toLocaleString() 方法。

BigInt.prototype.toString() 返回以指定基數(base)表示指定數字的字符串。覆蓋 Object.prototype.toString() 方法。

BigInt.prototype.valueOf() 返回指定對象的基元值。 覆蓋 Object.prototype.valueOf() 方法。

JSON中使用

對任何 BigInt 值使用JSON.stringify()都會引發TypeError,因為默認情況下 BigInt 值不會在 JSON 中序列化。但是,如果需要,可以實現 toJSON方法:

BigInt.prototype.toJSON = function() { return this.toString(); }JSON.stringify(BigInt(1)); // "1"

總結

以上是生活随笔為你收集整理的【ES11(2020)】新增数据类型 BigInt的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。