当前位置: 首页 > 知识库问答 >
问题:

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

叶嘉颖
2023-04-21

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

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

共有3个答案

袁骏祥
2023-04-21

超过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
韩阳成
2023-04-21

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

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

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

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

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

 类似资料:
  • 本文向大家介绍es6新增了哪些数据类型?相关面试题,主要包含被问及es6新增了哪些数据类型?时的应答技巧和注意事项,需要的朋友参考一下

  • 下面这个data1怎转化成data2格式的?

  • 主要内容:1. JS 基本数据类型,2. JS 引用数据类型数据类型指的是可以在程序中存储和操作的值的类型,每种编程语言都有其支持的数据类型,不同的数据类型用来存储不同的数据,例如文本、数值、图像等。 JavaScript 是一种动态类型的语言,在定义变量时不需要提前指定变量的类型,变量的类型是在程序运行过程中由 JavaScript 引擎动态决定的,另外,您可以使用同一个变量来存储不同类型的数据,例如: JavaScript 中的数据类型可以分为两种类型

  • 数据类型就是 JavaScript 中可操作的数据的类型。 数据类型分为值类型与引用类型。 在 ES6 之前,主要有以下数据类型: 值类型 字符串 数字 布尔 null undefined 引用类型 对象 数组 函数 1. 为什么需要不同的数据类型 在学习自然数学的时候,所有的加法减法等操作都是针对数字的,数字加上操作符让他们有了意义。 在学习语文课的时候,不同的词语可以组合成句子,主谓宾语法与词

  • 本文向大家介绍ES6学习笔记之新增数据类型实例解析,包括了ES6学习笔记之新增数据类型实例解析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了ES6学习笔记之新增数据类型。分享给大家供大家参考,具体如下: 1、数据解构赋值 1、数组的解构赋值 基本用法:let  [key1,key2...]=[value1,value2...] 注意左右的key与value格式要匹配对应,键值可以缺省,但

  • 问题内容: 我了解在创建这样的新对象时: 更通用,并且允许更多的可重用性,但是当创建tri时会发生以下情况: 由于Triangle是GeomObject的子类,因此tri还是不是GeomObject?声明的类型如何影响编译?谢谢 add:另一个问题:说我有 Integer n1 = new Integer(3); Object n2 = new Integer(4); System.out.pri