昨天译了一篇文章:BigInt:JavaScript 中的任意精度整数。昨晚又抽空总结了一下 BigInt
的那些坑。
1. 定义形式
BigInt
使用数字字面量加 n
表示支持二进制、八进制、十六进制形式。
对于八进制,只支持新写法 0o064n
,不支持旧的写法 0640
。
普通写法:
1n
十六进制:
0x6n
0X6n
八进制:
0o6n
0O6n
06n // ❌SyntaxError
二进制:
0b10n
0B10n
BigInt
不支持科学计数法形式:
1e25n // ❌ SyntaxError
2. 转换为字符串
当作为 key 时,所有值都会被转换为字符串,而 BigInt
转字符串时是没有后缀 n
的。
String(12n) === "12"
因此:
let obj = { };
obj[32n] = 1;
obj[32] === 1;
数组同理, array[5n]
等同于 array[5]
等同于 array["5"]
。
注:这并不意味着 array[xxxn]
和 array[xxx]
是一样的。因为 BigInt
可以超越 Number
的安全表示边界。
let obj = {};
obj[9007199254740993n] = "foo";
obj[9007199254740993n] === "foo";