BigInt
coderljw 2024-10-13 大约 1 分钟
# 1. BigInt(int)
- 可以使用构造函数(BigInt() )和字面量(7n)创建 bigint 类型表示整数。
- 不能使用 === 与 number 类型比较,使用 == 比较会隐式转换后再比较,Object.is() 比较为 false。
- 除一元加号(+)运算符外,所有运算符都可以使用,除法会自动截除小数部分(bigint 只能表示整数),不能混合 number 类型(比较运算符可以)。
- 0n 和 -0n 判断为 true,不能使用 Math 函数。
BigInt(7) === 7n // => true
// 可用进制形式表示
BigInt(0b1100001001) // => 777n
7n === 7 // => false
7n == 7 // => true(等同于 Number(7n) === 7)
Object.is(7, 7n) // => false
+7n // => TypeError
7n + 1 // => TypeError
7n / 2n // => 3n
7n >> 1n // => 3n
7n > 1 // => true
0n == false // => true
[13n, 2, 0n, -1n, 1].sort((a, b) => Number(a) - Number(b)) // [-1n, 0n, 1, 2, 13n]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 2. BigInt.asIntN() & BigInt.asUintN()
BigInt.asIntN 静态方法将 BigInt 值转换为一个 与 之间的有符号整数。
BigInt.asUintN 静态方法将 BigInt 转换为一个 0 和 之间的无符号整数。
const max1 = 2n ** (64n - 1n) - 1n
// 溢出为负数
BigInt.asIntN(64, max1 + 1n) // => -9223372036854775808n
const max2 = 2n ** 64n - 1n
// 溢出为0n
BigInt.asUintN(64, max2 + 1n) // => 0n
1
2
3
4
5
6
7
2
3
4
5
6
7
# 3. toString([radix])
默认转换为 10 进制字符串,只有数字有进制转换表示。
radix 是 2-36 之间的整数,表示被转换字符串的基数,超出基数范围将报错。
777n.toString() // => '777'
777n.toString(2) // => '1100001001'
1
2
2