在 JavaScript 中,数字的表示范围有限,最大整数值为 2^53 - 1,超出该范围的整数会导致精度丢失。ES9 新增了一种数据类型 BigInt,可以表示任意大小的整数。
BigInt 类型的定义与使用
BigInt 类型是以 n
结尾的整数,如 10n
、-10000000000000000000000000n
等。BigInt 值可以和普通数字进行加减乘除运算,也可以进行位运算,但不能和字符串直接拼接。
定义一个 BigInt 类型的变量,可以使用 BigInt()
函数或在数字后面加上 n
。
const integer = BigInt(123); // 为整数 123 创建 BigInt 类型 const biginteger = 98765432101234567890n; // 直接创建 BigInt 类型,注意最后面的 n
BigInt 类型的解析和格式化
与普通数字一样,BigInt 类型也可以进行解析和格式化。下面我们分别介绍一下 BigInt 类型的字符串解析和格式化。
BigInt 类型字符串的解析
由于 BigInt 类型字符串以 n
结尾,在解析时需要删掉 n
后再进行解析,可以使用 slice()
和 BigInt()
函数来实现。
const str = "12345678901234567890n"; const biginteger = BigInt(str.slice(0, -1)); // 大整数字符串解析为 BigInt 类型
BigInt 类型的格式化输出
格式化输出时,可以将 BigInt 值转成字符串后在字符串上进行格式化,也可以使用 BigInt 实例的 toString()
方法进行转换并指定基数。
const biginteger = 12345678901234567890n; console.log(`BigInt 值为 ${biginteger.toString()} 或 ${biginteger.toString(16)}`); // "BigInt 值为 12345678901234567890 或 2bdc545e0f499a6a"
BigInt 和普通数字的转换
由于 BigInt 值可以表示非常大的整数,所以 BigInt 类型的值和普通数字是不能直接相互转换的,需要使用 BigInt 实例的 Number()
方法进行转换。
const biginteger = 12345678901234567890n; const integer = Number(biginteger); // 此处 double 类型可以承载 2^53 - 1 范围内的整数
总结
ES9 新增 BigInt 类型,可以很好地解决 JavaScript 中整数范围有限的问题。在使用 BigInt 类型时,需要注意它和普通数字的转换问题,以及解析和格式化问题。熟练掌握 BigInt 类型的使用方法,将能更好地编写 JavaScript 应用程序。
示例代码
// javascriptcn.com 代码示例 const str = "12345678901234567890n"; const integer = BigInt(123); // 为整数 123 创建 BigInt 类型 const biginteger = 98765432101234567890n; // 直接创建 BigInt 类型,注意最后面的 n const bigNumber = BigInt(str.slice(0, -1)); // 大整数字符串解析为 BigInt 类型 console.log(`整数值 ${integer}`); console.log(`大整数值 ${biginteger}`); console.log(`从字符串解析出的大整数值 ${bigNumber}`); console.log(`BigInt 值为 ${biginteger.toString()} 或 ${biginteger.toString(16)}`); const double = Number(biginteger); // BigInt 类型转换为 double 类型 console.log(`double 类型的大整数值 ${double}`);
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/654704a57d4982a6eb168c50