Types JavaScript que vous ne connaissez peut-être pas - BigInt

Continuez à créer, accélérez la croissance ! C'est le premier jour de ma participation au "Nuggets Daily New Plan · June Update Challenge", cliquez pour voir les détails de l'événement

Nous savons qu'il existe désormais 7 types de base en JavaScript, null/undefined/number/string/boolean/bigint/symbol. Parmi eux, bigint est officiellement ajouté dans ES 2020. Certains enquêteurs aiment approfondir cette fonctionnalité, alors découvrons ce qu'est BigInt ? Pourquoi avons-nous besoin de BigInt ?

Qu'est-ce que BigInt ?

concept

Nous savons que la plus grande valeur du type Number en JavaScript 2^53- 1est Number.MAX_SAFE_INTEGER.

BigInt est un objet intégré qui permet de représenter des entiers supérieurs à 2^53 - 1. Autrement dit, BigInt peut représenter des entiers arbitrairement grands.

déclaration

Vous pouvez en définir à un littéral entier ou en appelant une fonction . comme suit:BigInt()BigInt

const theBiggestInt = 9007199254740991n;
const alsoHuge = BigInt(9007199254740991);
// ↪ 9007199254740991n
复制代码

Détection de type

typeofL' BigIntobjet renvoie une bigintchaîne.

typeof 1n === 'bigint'; // true
typeof BigInt('1') === 'bigint'; // true
复制代码

Syntaxe de base de BigInt et points d'attention

BigInt est très similaire au type Number dans de nombreux cas, mais il existe également de nombreux points différents. Lorsque vous utilisez le type BigInt, vous devez tenir compte des points suivants :

Opération:

point de grammaire Soutien Remarque
+, *, -, **, % Support
/ pas de support sera arrondi
Opérateur unaire (+) pas de support
>>> (décalage à droite non signé) pas de support Parce que BigInt est signé
Opérations au niveau du bit (sauf pour les décalages à droite non signés) Support
Méthodes d'objets mathématiques pas de support

illustrer:

  • Lors de la division, lors de l'utilisation de BigInt, les opérations avec des décimales seront arrondies
const expected = 4n / 2n;
// ↪ 2n

const rounded = 5n / 2n;
// ↪ 2n, not 2.5n

复制代码
  • Opération mixte avec Nombre. Il doit être converti dans le même type, parfois cela causera le problème de la perte de précision, il n'est donc pas recommandé de l'utiliser comme ça
  • 在对象中使用 BigInt 的时候,假如使用 JSON.stringify() 会发生类型错误(TypeError)

综上所述,可以看到 BigInt 的使用需要注意的点还是非常多的,并且在和 Number 类型转换的时候还会发生精度丢失问题,因而建议仅在值可能大于2^53 时使用 BigInt 类型。

那么 BigInt 现在有哪些应用场景呢?

BigInt 的应用场景

高精度时间戳

大于 2^53 - 1 的整数的一个应用场景就是高精度时间戳。精确到纳秒级别的时间戳很常见,经常用来记录特定程序的执行事件,以便进行性能分析,BigInt 可以表示高精度时间戳,在后端性能分析、性能调优中发挥作用。

大整数 ID

比如 Twitter 的 id 生成服务,当 id 持续增长时,就会超出 JS 的安全范围,因此要求同时冗余地返回字符串型的 id。假如有 BigInt 类型就可以直接使用。

兼容性 & PolyFill

can i use 中的数据显示,Chrome 的支持度会好很多,IE 全军覆没,整体覆盖 92.25% 的用户。

现在可以使用 JSBI — pure-JavaScript BigInts 这个库来实现 BigInt。JSBI 是直接使用了 V8 和 Chrome 中 BigInt 的设计和实现方式,功能与浏览器中一致,语法稍有不同。假如 BigInt 被所有的浏览器原生支持后,可以使用 babel 插件 babel-plugin-transform-jsbi-to-bigint 移除 JSBI 转为原生的 BigInt 语法。

总结

En général, BigInt peut représenter des entiers arbitrairement grands, et les scénarios d'utilisation actuels sont relativement peu nombreux. L'utilisation de BigInt nécessite beaucoup d'attention, il est donc recommandé d'utiliser le type BigInt uniquement lorsque la valeur peut être supérieure à 2^53. La compatibilité actuelle est générale, vous pouvez envisager d'utiliser la bibliothèque jsbi à la place.

faire référence à

Je suppose que tu aimes

Origine juejin.im/post/7102765612698435615
conseillé
Classement