在 JavaScript 中,数字类型是一个非常重要的数据类型,它可以存储整数、浮点数等不同类型的数字。然而,随着数字的不断增长,JavaScript 的数字类型也开始表现出了一些限制。为了解决这些限制,ES11 引入了一个新的数据类型 BigInt,用于存储更大范围的整数。
BigInt 类型的定义
BigInt 类型是在 ES11 中引入的一种新的数据类型,用于存储大于 2^53-1 的整数。在 JavaScript 中,Number 类型的最大安全整数是 2^53-1,如果需要存储更大的整数,就需要使用 BigInt 类型。
BigInt 类型的定义方式和 Number 类型类似,使用整数值后面加上 "n" 来表示:
const bigNumber = 1234567890123456789012345678901234567890n;
BigInt 类型的运算
BigInt 类型支持大多数的数学运算符,例如加、减、乘、除、取余等。它们的运算规则与 Number 类型相同,但是需要注意的是,BigInt 类型只能和 BigInt 类型进行运算,否则会抛出类型错误的异常。
示例代码:
-- -------------------- ---- ------- ----- ---------- - ------------------------------------------ ----- ---------- - ------------------------------------------ -- -- ----- ------- - ---------- - ----------- --------------------- -- ------------------------------------------ -- -- ----- ------- - ---------- - ----------- --------------------- -- ----------------------------------------- -- -- ----- ------- - ---------- - ----------- --------------------- -- ------------------------------------------------------------------------------ -- -- ----- ------- - ---------- - ----------- --------------------- -- --- -- -- ----- ------- - ---------- - ----------- --------------------- -- ----------------------------------------
BigInt 类型的转换
由于 BigInt 类型和其他数据类型不能直接进行运算,因此需要将 BigInt 类型转换为其他数据类型。ES11 提供了三种方法来进行 BigInt 类型的转换:
BigInt.prototype.toString()
将 BigInt 类型转换为字符串类型。
示例代码:
const bigNumber = 1234567890123456789012345678901234567890n; const str = bigNumber.toString(); console.log(str); // "1234567890123456789012345678901234567890"
BigInt.asIntN()
将 BigInt 类型转换为指定位数的有符号整数。如果 BigInt 类型的值超出了指定位数,则按照模运算的方式进行截断。
示例代码:
const bigNumber = 1234567890123456789012345678901234567890n; const int = BigInt.asIntN(32, bigNumber); console.log(int); // 244648530
BigInt.asUintN()
将 BigInt 类型转换为指定位数的无符号整数。如果 BigInt 类型的值超出了指定位数,则按照模运算的方式进行截断。
示例代码:
const bigNumber = 1234567890123456789012345678901234567890n; const uint = BigInt.asUintN(32, bigNumber); console.log(uint); // 244648530
BigInt 类型的注意事项
使用 BigInt 类型需要注意以下几点:
- BigInt 类型不能和 Number 类型进行运算,否则会抛出类型错误的异常。
- BigInt 类型不支持位运算符(例如按位与、按位或、按位异或等)。
- BigInt 类型不能作为对象的属性名或数组的索引值。
- BigInt 类型不能直接和字符串进行运算,需要先将 BigInt 类型转换为字符串类型。
- BigInt 类型的值不能通过 JSON.stringify() 方法进行序列化。
总结
BigInt 类型是 ES11 中引入的一种新的数据类型,用于存储大于 2^53-1 的整数。它支持大多数的数学运算符,但不能和 Number 类型进行运算。使用 BigInt 类型需要注意一些细节,例如不能作为对象的属性名或数组的索引值等。BigInt 类型的引入为 JavaScript 的数字处理能力提供了更大的灵活性和扩展性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66039a1ad10417a22200ac4f