JavaScript BigInt
JavaScript BigInt
变量用于存储太大而无法用普通 JavaScript Number
表示的大整数。
JavaScript 整数精度
JavaScript 整数的精度只有 15 位。
在 JavaScript 中,所有数字都以 64 位浮点格式(IEEE 754 标准)存储。
使用此标准,大整数无法精确表示,将被四舍五入。
因此,JavaScript 只能安全地表示整数
最大到 9007199254740991 +(253-1)
以及
最小到 -9007199254740991 -(253-1)。
在此范围之外的整数值将失去精度。
如何创建 BigInt
要创建一个 BigInt
,请在整数末尾添加 n 或调用 BigInt()
示例
let x = 9999999999999999;
let y = 9999999999999999n;
自己试一下 »
let x = 1234567890123456789012345n;
let y = BigInt(1234567890123456789012345)
自己试一下 »
BigInt:一种新的 JavaScript 数据类型
JavaScript typeof
一个 BigInt
是 "bigint"
BigInt
是 JavaScript 中的第二种数值数据类型(在 Number
之后)。
使用 BigInt
,JavaScript 中支持的数据类型总数为 8 种
1. 字符串
2. 数字
3. BigInt
4. 布尔值
5. 未定义
6. 空值
7. 符号
8. 对象
BigInt 运算符
可以在 JavaScript Number
上使用的运算符也可以在 BigInt
上使用。
注意
BigInt
和 Number
之间的算术运算是不允许的(类型转换会丢失信息)。
无符号右移 (>>>) 无法在 BigInt
上执行(它没有固定的宽度)。
BigInt 小数
BigInt
不能有小数。
BigInt 除法示例
let x = 5n;
let y = x / 2;
// 错误:无法混合 BigInt 和其他类型,请使用显式转换。
let x = 5n;
let y = Number(x) / 2;
自己试一下 »
BigInt 十六进制、八进制和二进制
BigInt
也可以用十六进制、八进制或二进制表示法编写
BigInt 十六进制示例
let hex = 0x20000000000003n;
let oct = 0o400000000000000003n;
let bin = 0b100000000000000000000000000000000000000000000000000011n;
自己试一下 »
精度问题
舍入可能损害程序安全性
浏览器支持
BigInt
自 2020 年 9 月起在所有浏览器中得到支持
Chrome 67 | Edge 79 | Firefox 68 | Safari 14 | Opera 54 |
2018 年 5 月 | 2020 年 1 月 | 2019 年 7 月 | 2020 年 9 月 | 2018 年 6 月 |
最小和最大安全整数
ES6 向 Number 对象添加了最大值和最小值属性
MAX_SAFE_INTEGER
MIN_SAFE_INTEGER
新的 Number 方法
ES6 还向 Number 对象添加了两种新方法
Number.isInteger()
Number.isSafeInteger()
Number.isInteger() 方法
如果参数是整数,则 Number.isInteger()
方法返回 true
。
Number.isSafeInteger() 方法
安全整数是指可以作为双精度数准确表示的整数。
如果参数是安全整数,则 Number.isSafeInteger()
方法返回 true
。
安全整数是所有从 -(253 - 1) 到 +(253 - 1) 的整数。
这是安全的:9007199254740991。这不是安全的:9007199254740992。