BigInt
BigInt
是在 2019 年 9 月被正式纳入 ECMAScript 标准中的特性。虽然 BigInt
不是频繁使用的特性,但其特殊性在于它是一种新的原始数据类型,同时又属于数值类型的一种。由于 BigInt
类型的加入,JavaScript 中共支持两种数值类型,即 Number
类型和 BigInt
类型。目前,JavaScript 语言中共有以下七种原始数据类型:
-
Undefined
-
Null
-
Boolean
-
String
-
Symbol
-
Number
-
BigInt
JavaScript 语言使用双精度 64 位浮点数格式来表示 Number
类型的值。Number
类型能够安全表示的最大整数为 253 - 1,该数值能够使用内置的 Number
对象上的 MAX_SAFE_INTEGER 属性来表示。BigInt
类型能够表示任意精度的整数,尤其是大于 253 - 1 的整数,这也正是引入 BigInt
类型的原因。
创建 BigInt
我们可以使用以下两种方式来创建 BigInt
类型的值:
-
使用
BigInt
字面量。 -
使用
BigInt()
函数。
BigInt
字面量的语法是在一个整数后面添加一个小写字母 “n”。字母 “n” 必须紧随数字之后,两者之间不允许存在空白字符。示例如下:
const unit = 1n;
使用 BigInt()
函数也能够创建 BigInt
类型的值。BigInt()
函数会尝试将传入的参数转换为 BigInt
,最基本的使用场景是将一个整数转换为 BigInt
类型的值。示例如下:
const unit = BigInt(1); // 1n
BigInt 与 Number
BigInt
类型的值能够与 Number
类型的值进行大小及相等关系的比较。在进行严格相等比较时,BigInt
类型的值与 Number
类型的值永远不相等。在进行非严格相等比较及大小关系比较时,BigInt
类型的值与 Number
类型的值将进行数学意义上的比较。
虽然 BigInt
类型的值可以与 Number
类型的值进行比较,但是 BigInt
类型的值不允许与 Number
类型的值一起进行混合数学运算。示例如下:
// 类型错误!无法混合使用BigInt和其他类型
1 + 1n;
通过内置的 Number()
函数能够将 BigInt
类型的值转换为 Number
类型的值。但要注意,在 BigInt
类型与 Number
类型之间进行强制类型转换时有可能损失精度。示例如下:
Number(1n); // 1