在前端开发中,数字计算是不可避免的一个问题,往往我们会用到很大的整型数字。但是传统的 JavaScript 中,整型数字有精度限制,导致我们无法处理超过 Number.MAX_SAFE_INTEGER(2的53次方 - 1)的数字。因此,ES10 引入了 BigInt,支持超长整型数字的运算。
什么是 BigInt?
BigInt(即大整数)是 ES10 中引入的一种新的原始数据类型,用于表示更大范围的整数数据,其大小不受运算精度的限制,可以表示任意大小的整数,也不会出现精度丢失问题。
BigInt 通过在数字后面加上一个 n 或者调用 BigInt() 函数来创建。例如:
const bigNum = 1234567890123456789012345678901234567890n; const bigNum2 = BigInt('1234567890123456789012345678901234567890');
BigInt 与普通的数字有以下区别:
- BigInt 不能与普通数字混合运算。
- BigInt 不能使用 Math 对象的方法,需要使用 BigInt 对象自带的方法。
BigInt 的运算符
BigInt 算术运算符与普通数字运算符相同,但是有一些细微的区别。
加法:+
BigInt 的加法使用 + 运算符,它与普通数字的加法使用方式相同。例如:
const bigNum1 = 1234567890n; const bigNum2 = 1234567890n; const result = bigNum1 + bigNum2; console.log(result); // 输出 2469135780n
减法:-
BigInt 的减法使用 - 运算符,它与普通数字的减法使用方式相同。例如:
const bigNum1 = 1234567890n; const bigNum2 = 1234567800n; const result = bigNum1 - bigNum2; console.log(result); // 输出 90n
乘法:*
BigInt 的乘法使用 * 运算符,它与普通数字的乘法使用方式相同。例如:
const bigNum1 = 1234567890n; const bigNum2 = 9876543210n; const result = bigNum1 * bigNum2; console.log(result); // 输出 12193263113702179500n
除法:/
BigInt 的除法使用 / 运算符,它与普通数字的除法使用方式相同。例如:
const bigNum1 = 12193263113702179500n; const bigNum2 = 9876543210n; const result = bigNum1 / bigNum2; console.log(result); // 输出 1234567890n
模运算:%
BigInt 的模运算使用 % 运算符,它与普通数字的模运算使用方式相同。例如:
const bigNum1 = 12193263113702179500n; const bigNum2 = 9876543210n; const result = bigNum1 % bigNum2; console.log(result); // 输出 1234567890n
幂运算:**
BigInt 的幂运算使用 ** 运算符,它与普通数字的幂运算使用方式相同。例如:
const bigNum = 12345n; const result = bigNum ** 10n; console.log(result); // 输出 1947542738814697265625n
BigInt 的使用场景
BigInt 可以用于任何需要处理极限数字的场景,例如:
- 大型整形计算,例如银行、地理测量等场景;
- 处理加密和哈希算法的结果;
- 处理单独的 64 位带符号值(普通数字最大值为 2^53 - 1),例如 Unix 时间戳。
总结
ES10 中新增了一个原始数据类型 BigInt,它解决了普通数字无法处理超过 Number.MAX_SAFE_INTEGER(2的53次方 - 1)的数字的问题。BigInt 与普通的数字有所不同,主要是不能混合运算,且不能使用 Math 对象的方法。BigInt 的运算符与普通数字的运算符基本相同,但是需要注意一些细节。BigInt 可以用于任何需要处理极限数字的场景。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64c618d54908f32798b274e4