ES10 之 BigInt:JavaScript 的高精度计算

阅读时长 5 分钟读完

在过去,JavaScript 的数字类型只有 Number 类型和其子类型,没有可以表示超过 Number 类型范围的数据类型。这一点对于前端开发者来说可能无法理解,但对于需要进行高精度计算的应用来说,这是一个极大的限制。

通过 ES10,新增了 BigInt 类型,该类型允许开发者表示任意大小的整数。BigInt 类型可以用于大型数据的精确计算,例如数学、加密等领域,这为 JavaScript 增加了许多功能。

本文将介绍 ES10 中的 BigInt,深入探讨其用法、性能以及实例演示,以便读者可以快速掌握相关知识。

BigInt 基础

BigInt 是一种可以存储大整数的数据类型,与 Number 不同,BigInt 可以表示任意精度的整数值。BigInt 构造函数接受一个字符串或数字类型参数作为整数的值。

需要注意的是,为了能够正确表示大整数,BigInt 类型需要在数字后面加上一个 n。不过在字符串定义的时候,不需要加上这个后缀。

对于在实际使用中,我们可以用简便的方式操作 BigInt:

BigInt 支持常见的数学运算操作。

加法

减法

乘法

除法

BigInt 的除法返回的是一个整数,如果除数无法整除,将自动截尾。

BigInt 还支持取余和幂等。

取余

幂等

BigInt 可以使用比较运算符,包括相等,不等,大于,小于,大于等于和小于等于。

相等

不等

大于

小于

大于等于

小于等于

BigInt 实用扩展

原生的 toString() 方法

与 Number 对象一样,BigInt 对象也有 toString() 方法。使用该方法可以将 BigInt 值转换为字符串。

类别判断

与 typeof 关键字不同,BigInt.bingInt(value) 方法可以有效判断任意值 value 是否为 BigInt 数值。

JSON 序列化

JavaScript 中的 JSON 不支持 BigInt 类型,但是在 JavaScript 对象包含 BigInt 类型属性的情况下,可以进行 JSON 序列化实际上将 BigInt 转为字符串。

类型转换

因为 BigInt 类型拥有更高的精度,因此如果使用 Number 类型的运算符和计算,BigInt 值会被强制转换为 Number 类型,导致精度丢失,因此应该尽量避免这种情况的发生。

BigInt 类型提供了三种类型转换方法,分别是 Number()、String()、Boolean(),都是将 BigInt 类型转为相应类型的行为。

BigInt 性能

BigInt 类型的运行效率真的值得信任吗?实验证明,BigInt 消耗的资源比正常整数要高得多,因为它们需要更多的内存空间来存储。

在进行大规模计算的情况下,BigInt 运算速度很慢,不适用于复杂的计算和较长的数学运算。在小数据范围内,BigInt 使用相对较少的内存, 速度可以和其他数字类型相比。

在实际使用过程中,应该结合实际情况和需求选择合适的数据类型,权衡使用 BigInt 带来的高精度计算能力和性能带来的影响。

总结

ES10 的 BigInt 类型是 JavaScript 语言史上的里程碑式进步,它为前端开发者提供了更多的选择,高精度计算这一强项,为解决一些类似密码学问题提供了很大的帮助。大部分常规的运算符都可以应用在 BigInt 类型上。

但同时需要注意,BigInt 值的运算和转换都可能产生额外的开销,需要结合实际情况和需求选择合适的数据类型,最大限度地发挥其优势。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/645060da980a9b385b970162

纠错
反馈