在日常的前端开发中,我们常常需要处理数字类型的数据。然而,一旦数字过大就会遇到 JavaScript 中数字精度的问题。
在 ES12 中,BigInt 的出现为我们解决了这个问题。
BigInt是什么?
BigInt 是一种新的数据类型,其可以表示任意大的整数,不受 JavaScript 中数字精度的限制。BigInt 是一个对象,由 "n"
后缀的整数文字或使用 BigInt()
构造函数创建。
下面是一个使用 BigInt 的例子:
const bigNumber = 900719925474099187n; const anotherNumber = BigInt(Number.MAX_SAFE_INTEGER); console.log(typeof(bigNumber), bigNumber); console.log(typeof(anotherNumber), anotherNumber);
输出结果为:
bigint 900719925474099187n bigint 9007199254740991n
我们可以看到,BigInt 可以表示更大的整数,且以后面的 n
标记。
BigInt的使用
创建
BigInt 可以通过 BigInt()
构造函数来创建。同时,我们也可以将其他类型的数据类型转化为 BigInt 类型:
const bigIntNumber = BigInt(9007199254740992); const bigIntFromNumber = BigInt(Number.MAX_SAFE_INTEGER); const bigIntFromString = BigInt("9007199254740993"); console.log(typeof(bigIntNumber), bigIntNumber); console.log(typeof(bigIntFromNumber), bigIntFromNumber); console.log(typeof(bigIntFromString), bigIntFromString);
输出结果为:
bigint 9007199254740992n bigint 9007199254740991n bigint 9007199254740993n
需要注意的是,由于 BigInt 运算结合性等问题,不支持使用 BigInt()
方法将数字字面量转换为 BigInt 类型。最好的选择是使用 "n" 后缀来创建 BigInt 类型的数字。
运算
BigInt 支持所有的 JavaScript 数值运算符,且保留了与其它数字类型的副作用。也就是说,我们可以对 BigInt 和 Number
进行运算。
另外,配合运算符和标准 Number 工具库,BigInt 可以做更高精概率计算。
下面是一个使用 BigInt 进行运算的例子:
const bigNumber = 900719925474099187n; const anotherNumber = BigInt(Number.MAX_SAFE_INTEGER); console.log("加法:", bigNumber + anotherNumber); console.log("减法:", bigNumber - anotherNumber); console.log("乘法:", bigNumber * anotherNumber); console.log("除法:", bigNumber / anotherNumber); console.log("求余:", bigNumber % anotherNumber); console.log("减一:", bigNumber - 1n);
输出结果为:
加法: 900719925474099208n 减法: 176n 乘法: 81233638555016037408073893881590587777n 除法: 899999999999999.0999999999999827556111127686844n 求余: 3867427646369746n 减一: 900719925474099186n
比较
我们可以通过比较运算符来对 BigInt 进行比较操作,这些运算符包括小于(<
)、等于(==
)、大于(>
)、小于等于(<=
)和大于等于(>=
)。
console.log(10n < 20); console.log(40n > 20.1); console.log(30.1n == 30);
输出结果为:
false true true
值得注意的是,当我们使用 ==
进行比较时,会将 BigInt 和 Number
转换后再进行比较。因此,要进行确切的比较,最好使用 ===
。
实战应用
当我们需要处理较大整数时,BigInt 是一种很好的选择。下面是一个使用 BigInt 的例子:
给定一个整数数组 nums
和一个整数 k
,请返回该数组中所有元素相加等于 k
的不同组合数。
-- -------------------- ---- ------- -------- -------------------- -- - --- ------ - ---------- --- -- - ------------ - ------------- ------ - --- --- ---- - - -- - - ------------ ---- - --- --- - ---------------- --- ---- - - ---- - -- ------- ---- - ----- -- ---- - ----- - - ------ ----------- - ----- ---- - --- -- --- ----- - - -- -------------------------------- ---------------
输出结果为:
6
在上面的例子中,我们使用了 BigInt 类型来计算整数的和以及不同的组合数。
总结
ES12 中的 BigInt 弥补了 JavaScript 中数字精度的不足之处,应用非常的广泛。当我们需要处理大数运算时,BigInt 是一个很好的选择。同时,BigInt 的应用也进一步推动了 JavaScript 的发展,提高了该语言的处理能力。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/649bed0f48841e98948b04b8