概述
- JS 所有数字都保存成 64 位浮点数,这给数值的表示带来了两大限制。一是数值的精度只能到 53 个二进制位(相当于 16 个十进制位),大于这个范围的整数,JS是无法精确表示,这使得JS不适合进行
科学和金融
方面的精确计算。凡是大于或等于2的1024次方的数值,JS无法表示,会返回Infinity
。
Math.pow(2, 1024)
BigInt
- ES2020引入了一种新的数据类型
BigInt(大整数)
。为了与Number
类型区别,BigInt 类型的数据必须添加后缀n
。
const a = 2172141653n;
const b = 15346349309n;
BigInt
与普通整数是两种值,它们之间并不相等。
42n === 42
typeof 1n
- BigInt 可以使用负号(
-
),但是不能使用正号(+
),因为会与 asm.js 冲突。
-42n
+42n
函数
BigInt
函数可以用来生成BigInt
类型的值,转换规则基本与Number()
一致。
BigInt(123)
BigInt('123')
BigInt(false)
BigInt(true)
new BigInt()
BigInt(undefined)
BigInt(null)
BigInt('123n')
BigInt('abc')
BigInt(1.5)
BigInt('1.5')
转换规则
Boolean(0n)
Boolean(1n)
Number(1n)
String(1n)
!1n
!0n
数学运算
+
、-
、*
和**
这四个运算符与Number
类型的行为一致。除法运算/
会舍去小数部分,返回一个整数。
123n + 12n
9n / 5n
1n + 1.3
其他运算
if (0n) {
console.log('if');
} else {
console.log('else');
}
0n < 1
0n < true
0n == 0
0n == false
0n === 0
'' + 123n