本文作者: jsweibo
本文链接: https://jsweibo.github.io/2020/06/04/JavaScript%E4%B8%AD%E7%9A%84BigInt/
摘要
本文主要讲述了:
- 什么是
bigint型值 - 作用
- 字面量
- 类型转换
- 计算
- 原型方法
- 静态方法
正文
什么是bigint型值
bigint是 ES2020 中新增的一种原始类型,其构造函数为BigInt
示例:
1 | console.log(BigInt); |
和Symbol()一样,BigInt()不能用作构造函数
作用
number只能精确表示[Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER]区间的整数
示例:
1 | // true |
bigint可以表示任意大的整数
示例:
1 | // false |
字面量
在数字的末尾增加一个n
示例:
1 | 1n; |
bigint也可以用二进制、八进制、十六进制表示
1 | // 2n,二进制 |
类型转换
1 | // "bigint" |
其他类型转换成 bigint
只有number、string、boolean、Array、Date有可能转换成bigint
注意:调用BigInt()必须提供参数
示例:
1 | // 0 |
number
示例:number -> bigint
1 | // 0n |
浮点数和NaN不可被转换为bigint
1 | // 报错 |
string
示例:string -> bigint
1 | // 1n |
不能被Number()转换为number型的字符串同样不能被BigInt()转换为bigint型
示例:
1 | // 报错 |
boolean
1 | // 1 |
undefined
1 | // NaN |
null
1 | // 0 |
symbol
1 | // 报错 |
Array
1 | // 0 |
Date
1 | // 1585478834593 |
RegExp
1 | // NaN |
Object
1 | // NaN |
function
1 | // NaN |
bigint 转换成其他
bigint可以转换为number、string、boolean、Array、RegExp
1 | // 1 |
计算
由于+运算的返回值为number型。如果传入bigint结果就会造成精度损失,故bigint无法使用+
1 | // 报错 |
由于Math静态方法的返回值为number。如果传入bigint结果就会造成精度损失,故bigint无法使用Math的静态方法
示例:
1 | // 报错 |
同理,bigint不得与number进行计算
1 | // 报错 |
bigint在做除法运算时会向0取整
1 | // 2n |
bigint不得使用>>>(无符号右移)
1 | // 25 |
因为比较不会造成精度损失,故bigint可与number进行大小比较
1 | // true |
原型方法
valueOf()
返回其自身
1 | // 1n |
toString()
转换为字符串
1 | // "1" |
toLocaleString()
转换为区域字符串
1 | // "1" |
静态方法
asUintN()
把指定的bigint型数值模拟成指定二进制位数下的无符号整数
示例:把255n和256n模拟成8位二进制位数下的无符号整数
8 个二进制位最多能表示[0, 0b11111111],即[0, 255]
用来表示无符号整数时,可以表示[0, 255]
1 | // 255n |
asIntN()
把指定的bigint型数值模拟成指定二进制位数下的有符号整数
示例:把127n和128n模拟成8位二进制位数下的有符号整数
8 个二进制位最多能表示[0, 0b11111111],即[0, 255]
用来表示有符号整数时,可以表示[-128, 127],其中[0, 0b01111111]用于表示[0, 127],[0b10000000, 0b11111111]用于表示[-128, -1]
1 | // 127n |
参考资料
本文作者: jsweibo
本文链接: https://jsweibo.github.io/2020/06/04/JavaScript%E4%B8%AD%E7%9A%84BigInt/
本文对你有帮助?请支持我
- 本文链接: https://jsweibo.github.io/2020/06/04/JavaScript%E4%B8%AD%E7%9A%84BigInt/
- 版权声明: 除非另有说明,否则本网站上的内容根据署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。