JavaScript BigInt 变量用于存储太大而无法用普通 JavaScript 数字表示的大整数值。
在 JavaScript 中,所有数字都以 64 位浮点格式存储。大整数无法被精确表示,会被四舍五入
- 最大为 9007199254740991(253-1)
- 最小为 -9007199254740991(-(253-1))
超出此范围的整数值会失去精度。
如何创建 BigInt
如需创建 BigInt,可以在整数末尾添加 n
,或调用 BigInt()
函数:
<!DOCTYPE html>
<html>
<body>
<p id="demo"></p>
<p id="demo1"></p>
<script>
let x = 9999999999999999;
let y = BigInt("9999999999999999");
document.getElementById("demo").innerHTML = x + "<br>" + y;
let x1 = 1234567890123456789012345n;
let y1 = BigInt(1234567890123456789012345)
document.getElementById("demo1").innerHTML = x1 + "<br>" + y1;
</script>
</body>
</html>
BigInt:一种新的 JavaScript 数据类型
BigInt 的 JavaScript 类型是 "bigint
":
let x = BigInt("9999999999999999");
document.getElementById("demo").innerHTML = typeof x; //返回 bigint
BigInt 是 JavaScript 中的第二个数值数据类型(在 Number 之后)。
对于 BigInt,JavaScript 支持的数据类型总数为 8 种:
- String
- Number
- Bigint
- Boolean
- Undefined
- Null
- Symbol
- Object
BigInt 运算符
可用于 JavaScript Number 的运算符也可用于 BigInt。
BigInt 乘法实例
let x = 9007199254740995n;
let y = 9007199254740995n;
let z = x * y; //返回81129638414606735738984533590025
不允许在 BigInt 和 Number 之间进行算术运算(类型转换会丢失信息)。
BigInt 无法进行无符号右移操作(>>>),因为它没有固定的宽度。
<script>
let x = 5n;
let y = Number(x) / 2;
document.getElementById("demo").innerHTML = y;
</script>
BigInt 十六进制、八进制和二进制
BigInt 也可以写成十六进制、八进制或二进制表示法:
BigInt 十六进制实例
<script>
let hex = 0x20000000000003n;
let oct = 0o400000000000000003n;
let bin = 0b100000000000000000000000000000000000000000000000000011n;
document.getElementById("demo").innerHTML = hex + "<br>" + oct + "<br>" + bin;
</script>
//十六进制、八进制和二进制
//9007199254740995
//9007199254740995
//9007199254740995
ES6 向 Number 对象添加了 max 和 min 属性:
MAX_SAFE_INTEGER
let x = Number.MAX_SAFE_INTEGER; (返回9007199254740991)MIN_SAFE_INTEGER
let x = Number.MIN_SAFE_INTEGER; (返回-9007199254740991)
新的数字方法
ES6 还为 Number 对象添加了两个新方法:
Number.isInteger()
Number.isSafeInteger()
Number.isInteger() 方法
如果参数是整数,则 Number.isInteger() 方法返回 true
,否则返回 false。
isInteger() 实例
Number.isInteger(10);
Number.isInteger(10.5);
Number.isSafeInteger() 方法
安全整数是可以精确表示为双精度数的整数。
如果参数是安全整数,则 Number.isSafeInteger() 方法返回 true
。
isSafeInteger() 实例
Number.isSafeInteger(10); //true
Number.isSafeInteger(12345678901234567890); //true
注意:
安全整数是从 -(253 - 1) 到 +(253 - 1) 的所有整数。
这是一个安全整数:9007199254740991。这不是一个安全整数:9007199254740992。