JavaScript的基本类型为:
- Boolean
- Null
- Undefined
- Number
- BigInt
- String
- Symbol
- Object
其中BigInt是JavaScript于2019.7.22正式公布,并成为第八个基本数据类型。
BigInt数据类型出现的目的是为了支持比Number数据类型支持的范围更大的整数值。使整数溢出不再是问题。
由于JS存在数值限制,整数范围是[-2^53, 2^53],即[-9007199254740991,9007199254740991]在这个范围之外就是失真。
javascript">//以下代码均为网页控制台中直接写
Number.MAX_SAFE_INTEGER
9007199254740991
javascript">Number.isSafeInteger(9007199254740991)
true
javascript">Number.isSafeInteger(9007199254740993)
false
当超过Number的最大数值以后,不论之后的数值为多大,JS都会返回固定的最大值
javascript">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一致,包括二元运算符:+、-、*、**、/、%,位运算:|,&,>>,<<
javascript">(7 + 6 - 5) * 4 ** 3 / 2 % 3;
// → 1
(7n + 6n - 5n) * 4n ** 3n / 2n % 3n;
// → 1n
但BigInt不支持一元运算符中的+号,但可以用-号表示一个负数
javascript">+1n
Uncaught TypeError: Cannot convert a BigInt value to a number at <anonymous>:1:1
-1n
-1n
并且,BigInt不可以与Number进行混合运算,否则会直接抛出异常
javascript">1 + 1n
Uncaught TypeError: Cannot mix BigInt and other types, use explicit conversions at <anonymous>:1:3
对于需要处理大数问题,使用BigInt是一个非常安全的方法,有关JavaScript的相关数据类型和知识会继续和大家分享。有问题欢迎讨论~