在 JavaScript 中,数字类型被用于处理数学计算。然而,由于 JavaScript 中的数字类型是基于浮点数的,因此有时会出现精度问题。为了解决这个问题,ES11 引入了一个新的数据类型:BigInt 类型。
BigInt 类型旨在提供高精度的整数运算, 较之 Number 类型,BigInt 类型在性能上略有劣势,但它提供了更高级别的数学计算功能。而且,BigInt 可以完美地处理超过 Number 类型最大安全数范围的数字。
在本文中,我们将探讨 BigInt 类型的定义、运算和使用,并利用示例代码来解释这些概念的具体实现。
BigInt 类型的定义
BigInt 类型是 ES11 新增的一种 JavaScript 基本数据类型,表示任意长度的整数。BigInt 字面量由后面跟着 "n" 的数字表示。
示例:
let bigNum = 1234567890123456789012345n;
注意: 在构造 BigInt 对象时,必须添加 "n" 后缀。
BigInt 类型的取值范围比 Number 类型大得多,可以表示大于 Number.MAX_SAFE_INTEGER
的数值。举个例子,你可以用 BigInt 类型来表示下面这个数字:
let bigNum = 9007199254740991000n;
其中 Number.MAX_SAFE_INTEGER
是 JavaScript 中的常量,等于 2^53 - 1(即9007199254740991)。因此,BigInt 类型便打破了 JavaScript 数字的极限。
BigInt 类型的运算
BigInt 可以直接进行整数运算,同样可以与 Number 类型进行运算。但是,需要注意的是,在两个不同类型的数字之间进行运算的结果将始终是 BigInt 类型。
示例:
-- -------------------- ---- ------- -- --------------- --- ------- - --------------------------- --- ------- - --------------------------- --- ------- - ------- - -------- --------------------- -- ------------------------------- -- --------------- --- ------- - --------------------------- --- --- - -- --- ------- - ------- - ---- --------------------- -- -------------------------------
BigInt 支持常见的算术运算操作符,对应的操作与 Number 类型相同。这里不再赘述
BigInt 对象的操作
BigInt 类型有两种形式:原始 BigInt 和 BigInt 对象。BigInt 对象可以使用 BigInt()
函数来创建。
下面是 BigInt 对象的主要操作:
BigInt()
: 将指定的值转换为 BigInt 类型。toString()
: 将BigInt 值转换为字符串类型。valueOf()
: 返回一个表示 BigInt 对象的原始值的基础数字值 。
示例:
let bigNum = BigInt(1234567890123456789012345); console.log(typeof bigNum); // bigint,对象类型 let bigStr = bigNum.toString(); console.log(typeof bigStr); // string,字符串类型 let bigCopy = bigNum.valueOf(); console.log(typeof bigCopy); // bigint,对象的原始基础数字值
使用 BigInt 类型
我们了解了 BigInt 类型的定义和操作之后,现在让我们尝试使用 BigInt 类型来解决在常规数学计算中出现的精度问题。
示例:计算阶乘
在此示例中,我们将使用 BigInt 对象计算阶乘,以展示 BigInt 类型在高精度整数计算方面的实际用途。
-- -------------------- ---- ------- -------- ------------ - --- ------ - --- --- ---- - - --- - -- -- ---- - ------ -- -- - ------ ------- - ---------------------------------------- -- -------------------------------------------------------------------------------------------------------------------------------------------------------------
在这个函数中,我们使用了 BigInt 对象来计算大数字的阶乘(如 100),因为它们超出了 Number 类型的最大安全数字的范围。
总结
在本文中,我们学习了 ES11 中新增的 BigInt 类型的定义、运算和使用。BigInt 类型提供了高精度整数计算的解决方法,使得 JavaScript 可以处理超过 Number 类型最大安全数的数字。但在使用 BigInt 类型时必须加上 "n" 后缀,而且需要注意 BigInt 和 Number 之间的运算会始终返回 BigInt 类型。在实际的情况中,我们可以使用 BigInt 类型来解决在常规数学计算中出现的精度问题,在处理大数字阶乘、Fibonacci 数列等算法时特别有用。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/646c5048968c7c53b0b50821