JS新增数据类型BigInt的实际应用场景?

背景:
BigInt是一种内置对象,提供了一种方法来表示大于2^53 - 1 的整数,2^53 - 1 为Number可以表示的最大数字,BigInt可以突破限制,可以用任意精度表示整数,超出Number的安全整数限制,也可以安全地存储和操作大整数。

熟悉了BigInt的基本概念之后,好像一直没有应用到实际项目的场景,请问下有哪些场景可以应用到吗?

阅读 2.6k
3 个回答
  1. 处理货币和金融数据
    以前这里计算是不建议在前端做的, 但是使用 BigInt 可以避免浮点数精度问题,并提供更准确的计算结果。
  2. 处理时间戳
    使用大精度时间戳,以确保在处理大量并发用户时不会出现 ID 重叠或其他问题。
  3. 加密算法
    比如 RSA,要求处理非常大的质数和整数位数,由于错误诊断和处理这些变量超出了 JavaScript 引擎所能够显式表示的范围,因此需要 BigInt 来存储必要的数据。
  4. 处理数字ID
    如果在数据库表中使用数字 ID 并且可能超出 Number 的精度范围,那么可以通过 BigInt 来处理和排序这些信息。这样可以避免将 ID 转换为字符串并在数据库中保留过多的额外字符。
  5. 大型数学科学计算
    以前这里计算是不建议在前端做的, 但是使用 BigInt 可以避免浮点数精度问题,并提供更准确的计算结果。
  6. 图形渲染
    渲染三维图形可能会涉及到很大的坐标等, 也许要BigInt

其实总体来看主要是解决了JS的大数与浮点数等的精度问题, 有要求精度的都可以用

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

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

参考:
https://cloud.tencent.com/developer/article/2064078

超过9007199254740991这个整数值后会有用到,常见场景如数据库里存储的bigint字段值。

Number.MAX_SAFE_INTEGER
// 9007199254740991
Number.MAX_SAFE_INTEGER + 1 == Number.MAX_SAFE_INTEGER + 2
// true
Number.MAX_SAFE_INTEGER - 1 == Number.MAX_SAFE_INTEGER - 2
// false
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏