BigInt类型笔记整理
BigInt
在ES10之前,JavaScript已经有6种基本类型了,而ES10带来了第七种数据类型BigInt
在MDN上看到关于BigInt的描述
BigInt is a built-in object that provides a way to represent whole numbers larger than 2**53 - 1, which is the largest number JavaScript can reliably represent with the Number primitive.
BigInt可以描述比原来JavaScript可以描述的数更大的数
创建BigInt
我们可以通过直接声明和为BigInt传入字符串,数值来创建BigInt类型的数值
直接声明时,只要在数字后面加上n,就是一个BigInt类型了
1 |
|
在传入字符串时,可以通过传入0x,0o,0b开头的字符串来对十六进制,八进制,二进制的数值创建BigInt类型的数值
1 |
|
如果传入其他字符串的话,就会报错
1 |
|
对BigInt类型的判断
要判断一个值是否为BigInt,可以用以下几种方式
- typeof
1
2typeof 1n; // "bigint"
typeof BigInt(1); // "bigint" - constructor
1
BigInt('1').constructor === BigInt; // true
- Object.prototype.toString
1
Object.prototype.toString.call(1n); // "[object BigInt]"
关于其他的类型判断见JavaScript类型判断总结
超过安全数的计算
我们知道,JavaScript原本的值的计算最大只到2**53-1,超过这个数值的计算结果会出现错误,而使用BigInt,我们可以超过这个数值正常计算,在JavaScript中,使用Number.MAX_SAFE_INTEGER来代表这个最大的安全数
我们看看不使用BigInt时的计算
1 |
|
这里n1+10后的答案显然是错误的,那么我们使用BigInt来计算
1 |
|
可以看到,这里的数值正常了
与Number类型的比较计算
要注意的是,BigInt类型不能直接和Number类型混合计算,否则会报错
1 |
|
在比较的时候,BigInt和Number类型的值是一样的
1 |
|
转为布尔值的值
BigInt变为布尔值是为true还是为false和Number一样,除了0n之外都为true
1 |
|