BigInt

coderljw 2024-10-13 JS 基础
  • JS 基础
  • BigInt
大约 1 分钟

# 1. BigInt(int)

  • 可以使用构造函数(BigInt() )和字面量(7n)创建 bigint 类型表示整数。
    1. 不能使用 === 与 number 类型比较,使用 == 比较会隐式转换后再比较,Object.is() 比较为 false。
    2. 除一元加号(+)运算符外,所有运算符都可以使用,除法会自动截除小数部分(bigint 只能表示整数),不能混合 number 类型(比较运算符可以)。
    3. 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. BigInt.asIntN() & BigInt.asUintN()

  • BigInt.asIntN 静态方法将 BigInt 值转换为一个 2width1-2^{width - 1}2width112^{width - 1} - 1 之间的有符号整数。

  • BigInt.asUintN 静态方法将 BigInt 转换为一个 0 和 2width12^{width} - 1 之间的无符号整数。

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

# 3. toString([radix])

  • 默认转换为 10 进制字符串,只有数字有进制转换表示。

  • radix 是 2-36 之间的整数,表示被转换字符串的基数,超出基数范围将报错。

777n.toString() // => '777'
777n.toString(2) // => '1100001001'
1
2
以父之名
周杰伦.mp3