JavaScript基本类型之处理大数-BigInt

JavaScript的基本类型为:

  • Boolean
  • Null
  • Undefined
  • Number
  • BigInt
  • String
  • Symbol
  • Object

其中BigInt是JavaScript于2019.7.22正式公布,并成为第八个基本数据类型。

BigInt数据类型出现的目的是为了支持比Number数据类型支持的范围更大的整数值。使整数溢出不再是问题。

由于JS存在数值限制,整数范围是[-2^53, 2^53],即[-9007199254740991,9007199254740991]在这个范围之外就是失真。

//以下代码均为网页控制台中直接写
Number.MAX_SAFE_INTEGER
9007199254740991
Number.isSafeInteger(9007199254740991)
true
Number.isSafeInteger(9007199254740993)
false

当超过Number的最大数值以后,不论之后的数值为多大,JS都会返回固定的最大值

const max = Number.MAX_SAFE_INTEGER;
max + 1
9007199254740992
const max = Number.MAX_SAFE_INTEGER;
max + 2
9007199254740992

我们会发现max+1和max+2的结果一样。只要我们在JavaScript中获得这个特定的值,就无法判断它是否准确。对安全整数范围以外的整数(即从Number.MIN_SAFE_INTERGER到Number.MAX_SAFE_INTERGER)的任何计算可能会失去精度。出于这个原因,我们只能依靠安全范围内的数字整数值。

BigInt

BigInt是一个新的数据类型,可以用任意精度表示整数。使用BigInt,即使超出Number的安全整数限制,也可以安全地存储和操作大整数。

创建一个BigInt类型的方法,在数字后面添加n即可,例如1和1n,也可以使用BigInt()将Number转换为BigInt.

需要注意的是,BigInt是一个新的数据类型,所以它和Number是完全不一样的,即123 !== 123n

但是在Number的最大范围内,二者的取值可以被转换为同一个,也就是说 123 == 123n

逻辑值

对于BigInt的其他性质,和Number是几乎保持一致的,比如逻辑值强转:

if (0n) {
  console.log('if');
} else {
  console.log('else');
}
else
//0n与false的逻辑值相同,即0与false

运算符

BigInt的运算操作以及支持的运算符与Number一致,包括二元运算符:+、-、*、**、/、%,位运算:|,&,>>,<<

(7 + 6 - 5) * 4 ** 3 / 2 % 3;
// → 1
(7n + 6n - 5n) * 4n ** 3n / 2n % 3n;
// → 1n

但BigInt不支持一元运算符中的+号,但可以用-号表示一个负数

+1n
Uncaught TypeError: Cannot convert a BigInt value to a number at <anonymous>:1:1
-1n
-1n

并且,BigInt不可以与Number进行混合运算,否则会直接抛出异常

1 + 1n
Uncaught TypeError: Cannot mix BigInt and other types, use explicit conversions at <anonymous>:1:3

对于需要处理大数问题,使用BigInt是一个非常安全的方法,有关JavaScript的相关数据类型和知识会继续和大家分享。有问题欢迎讨论~

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值