在 JavaScript 中,数字类型是一种基本数据类型,包括整数和浮点数。不过,由于 JavaScript 中整数类型的大小限制,可能无法准确表达非常大的整数。为解决这一问题,ECMAScript 7 引入了 BigInt 类型。本文将为您介绍 BigInt 类型的特性及使用方法。
什么是 BigInt 类型?
BigInt 类型是一种 JavaScript 的数据类型,用于表示任意精度的整数。在传统的 JavaScript 中,整数类型采用 32 位或 64 位的表示方式,因此无法表示超出这个范围的整数。而 BigInt 类型没有这个限制,可以表示任意大的整数。
如何使用 BigInt 类型?
BigInt 类型的字面量表示与其他基本类型的字面量表示方式不同。在 BigInt 类型的字面量上必须增加 n
或 N
后缀,以表示该字面量为 BigInt 类型,如下所示:
const a = 1234567890123456789012345678901234567890n; const b = 9007199254740992n; // 这是 2 的 53 次方,超过 JavaScript 整数类型的表示范围
在实际应用中, BigInt 类型可以参与任何整数类型可以参与的运算,如加、减、乘、除、求余等。
const a = 1234567890n; const b = 9876543210n; console.log(a + b); // 11111111100n console.log(a - b); // -8641975320n console.log(a * b); // 12193263113729294890n console.log(b / a); // 8n console.log(b % a); // 913917100n
BigInt 类型的相关方法
BigInt 类型提供了一些与数值计算相关的方法,下面简单介绍几种常用的方法。
BigInt.prototype.toString()
将 BigInt 类型的值转化为字符串。
const a = 1234567890123456789012345678901234567890n; console.log(a.toString()); // "1234567890123456789012345678901234567890"
BigInt.prototype.valueOf()
获取一个 BigInt 类型值的原始数值,与 Number 类型中的 valueOf() 方法类似。
const a = 1234567890n; console.log(a.valueOf()); // 1234567890n console.log(typeof a.valueOf()); // "bigint"
BigInt.prototype.toFixed()
在 BigInt 类型中,没有 toFixed() 方法,如果需要对 BigInt 类型进行四舍五入到指定位数的操作,需要先将 BigInt 转化为 Number,然后再使用 toFixed() 方法。
const a = 1234567890123456789012345678901234567890n; const aNumber = Number(a.toString()); console.log(aNumber.toFixed(2)); // "1234567890123456790020971031.60"
使用 BigInt 类型的注意事项
BigInt 类型的数据是不可变的,一旦创建就无法更改。
BigInt 类型不能与传统的整数类型进行混合运算,否则会产生类型错误。
const a = 1234567890; const b = 1234567890n; console.log(a + b); // TypeError: Cannot mix BigInt and other types, use explicit conversions
必须使用显式的 BigInt() 函数将传统的整数类型转化为 BigInt 类型。
const a = 1234567890; const b = BigInt(a); console.log(a + b); // 2469135780n
总结
BigInt 类型是 ECMAScript 7 引入的一种数据类型,用于表示任意精度的整数。使用 BigInt 类型可以解决 JavaScript 中整数类型的大小限制问题,实现对超大整数的精确表示和计算。要使用 BigInt 类型注意变量声明时需添加 n
或 N
后缀,运算时不能与传统整数类型混用,并且需要用 BigInt() 函数将传统整数类型转化为 BigInt 类型。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65b242bfadd4f0e0ffb731ae