在过去,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