在之前的 ECMAScript 中,数字数据类型默认是 Number,但是 Number 的表示范围是有限的,无法处理过大或过小的数据。因此在 ECMAScript 2020 中新增了 BigInt 数据类型,用于解决 Number 无法处理大数据的问题。
BigInt 数据类型的特点
BigInt 数据类型指的是任意大小的整数,它的表示范围比 Number 更加广泛。BigInt 可以表示的最大值为 (2n ** 53n) - 1n,最小值为 -(2n ** 53n) + 1n。
下面是 BigInt 数据类型的常见特点:
- 表示范围更广:相比 Number,BigInt 的表示范围更加广泛,可以表示更大或更小的整数。
- 支持运算符:BigInt 支持基本的运算符,如加减乘除、取模、位运算等。
- 字面量表示:可以使用字面量表示 BigInt 数据类型,字面量以 n 结尾,如 123n 表示 BigInt 类型整数 123。
- 不会自动转换:BigInt 不会自动转换成 Number,只能使用 BigInt 操作 BigInt,否则会报错。
BigInt 数据类型的语法
BigInt 数据类型的语法和 Number 很相似,都是通过字面量、变量声明和类型转换等方式创建。
字面量表示
可以使用数字后加 n 的方式表示 BigInt:
const bigNum = 12345678901234567890123456789012345678901234567890n;
变量声明
BigInt 变量声明使用 let 或者 const,语法和 Number 基本一致:
let bigNum = 12345678901234567890123456789012345678901234567890n; const anotherNum = 98765432109876543210987654321098765432109876543210n;
类型转换
可以使用 BigInt() 函数将 Number 转换成 BigInt 类型:
const bigNum = BigInt(12345678901234567890123456789012345678901234567890);
BigInt 数据类型的运算
BigInt 数据类型支持基本的运算符,如加减乘除、取模、位运算等。
算术运算
BigInt 支持加减乘除和取模运算,运算符和 Number 类型一样:
const a = 12345678901234567890n; const b = 98765432109876543210n; console.log(a + b); // 111111111111111111100000000000000000000000000000000n console.log(a - b); // -86419753208641975320n console.log(a * b); // 1219326324188368409250282504360456249873373013168834179000n console.log(a / b); // 0n console.log(a % b); // 12345678901234567890n
位运算
BigInt 支持位运算,运算符和 Number 类型一样:
-- -------------------- ---- ------- ----- - - -------- ----- - - -------- ------------- - --- -- -- ------------- - --- -- --- ------------- - --- -- -- ---------------- -- ---- ------------- -- ---- -- --- ------------- -- ---- -- -- ------------- --- ---- -- --
BigInt 和 Number 的转换
BigInt 数据类型和 Number 数据类型之间可以进行转换。
BigInt 转 Number
可以使用 Number() 函数将 BigInt 转换成 Number 类型,但需要注意 BigInt 转换成 Number 时,如果 BigInt 值超过最大范围,则会丢失一些数据:
const bigNum = 12345678901234567890123456789012345678901234567890n; const num = Number(bigNum); console.log(num); // 1.2345678901234568e+34
Number 转 BigInt
可以使用 BigInt() 函数将 Number 转换成 BigInt 类型,但需要注意 Number 转换成 BigInt 时,如果 Number 值超过 BigInt 的范围,则会报错:
const num = 12345678901234567890123456789012345; const bigNum = BigInt(num); // 报错:Number '12345678901234567890123456789012345' is too large for BigInt.
总结
BigInt 数据类型解决了 Number 无法处理大数据的问题,具有很好的拓展性和应用价值。在使用 BigInt 数据类型时,需要注意 BigInt 和 Number 之间的类型转换问题,以及 BigInt 数据类型的语法和运算特点。在实际应用中,可以将 BigInt 数据类型应用于大数据计算、密码学等方面,具有很大的潜力。
示例代码:
-- -------------------- ---- ------- ----- - - ---------------------- ----- - - ---------------------- ------------- - --- -- ---------------------------------------------------- ------------- - --- -- ---------------------- ------------- - --- -- ----------------------------------------------------------- ------------- - --- -- -- ------------- - --- -- --------------------- ----- - - ------------ ----- - - ------------ ------------- - --- -- -- -- ------------- - --- -- --- -- ------------- - --- -- -- -- ---------------- -- ---- - ---- - ----- - -- ------------- -- ---- -- --- ----- ------------- -- ---- -- -- ---- ------------- --- ---- -- -- --------------
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64a3d05648841e9894037e42