TypeError: 无法将 BigInt 转换为数字
消息
TypeError: Cannot convert a BigInt value to a number (V8-based) TypeError: Cannot mix BigInt and other types, use explicit conversions (V8-based) TypeError: BigInts have no unsigned right shift, use >> instead (V8-based) TypeError: can't convert BigInt to number (Firefox) TypeError: Conversion from 'BigInt' to 'number' is not allowed. (Safari) TypeError: Invalid mix of BigInt and other type in addition/multiplication/…. (Safari) TypeError: BigInt does not support >>> operator (Safari)
错误类型
哪里出错了?
算术运算符的两侧必须都是 BigInt 或都不是。如果一个运算涉及 BigInt 和数字的混合,则结果应该是 BigInt 还是数字是不明确的,因为在这两种情况下都可能存在精度损失。
当通过 数字强制转换 过程将 BigInt 隐式转换为数字时,也会发生此错误。例如,如果将 BigInt 传递给期望数字的内置方法。
如果在两个 BigInt 之间使用 无符号右移运算符 (>>>
),也可能发生此错误。在 Firefox 中,消息相同:“无法将 BigInt 转换为数字”。
示例
在运算中混合数字和 BigInt
js
const sum = 1n + 1;
// TypeError: can't convert BigInt to number
相反,请显式地将其中一侧强制转换为 BigInt 或数字。
js
const sum = 1n + BigInt(1);
const sum2 = Number(1n) + 1;
对 BigInt 使用无符号右移
js
const a = 4n >>> 2n;
// TypeError: can't convert BigInt to number
请改用普通右移。
js
const a = 4n >> 2n;