JS 基本数据类型 BigInt

893 阅读2分钟

常见 JS 基本数据类型

Number、String、Boolean、Undefined、Null、Symbol(表示独一无二的值)、BigInt

为什么需要 BigInt

许多编程语言支持多种数字类型,如浮点型、双精度型、整数型和双精度型, 但 JS 缺少显式整数类型。 在JS中,按照 IEEE 754 标准的定义,所有数字都以双精度 64 位浮点格式表示。 在此标准下,无法精确表示的非常大的整数将自动四舍五入。确切地说,JS 中的Number类型只能安全地表示-9007199254740991 (-(2^53-1)) 和9007199254740991(2^53-1)之间的整数,任何超出此范围的整数值都可能失去精度。

console.log(9999999999999999)
// → 10000000000000000

该整数大于JS Number 类型所能表示的最大整数,因此,它被四舍五入的。意外四舍五入会损害程序的可靠性和安全性。 JS 提供Number.MAX_SAFE_INTEGER常量来表示 最大安全整数,Number.MIN_SAFE_INTEGER常量表示最小安全整数

BigInt 原理

BigInt 的原理可以简单地解释为,它使用了一种基于数组的表示方法,其中每个数组元素存储了一个整数位的值。这种表示方式允许 BigInt 可以表示非常大的数字,远远超出了普通整数类型的表示范围。

与普通整数不同,BigInt 可以表示任意大小的整数,而不受计算机硬件或操作系统的限制。这是因为 BigInt 的表示方式不依赖于计算机硬件的位数或字长,而是根据需要动态分配内存来存储数字。

在 BigInt 的实现中,通常会使用多个整数位来表示一个大整数。例如,可以使用 32 位或 64 位整数作为数组元素,每个数组元素存储大整数的一部分。通过这种方式,BigInt 可以表示非常大的整数,例如几百位、几千位甚至更大的整数。

另外,BigInt 还支持各种常见的整数运算操作,例如加法、减法、乘法和除法等,通过对数组元素进行逐位操作来实现这些运算。这样,BigInt 可以在处理大整数计算时提供高精度和高效性能。

总的来说,BigInt 之所以可以表示大整数,是因为它使用了基于数组的表示方式,允许动态分配内存来存储任意大小的整数,并且支持各种常见的整数运算操作。这使得 BigInt 成为处理大数字计算的重要工具。