本文作者: 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) 进行许可。