RangeError: BigInt 负指数

BigInt 被提升到负 BigInt 值的幂时,会发生 JavaScript 异常 "BigInt 负指数"。

消息

RangeError: Exponent must be positive (V8-based)
RangeError: BigInt negative exponent (Firefox)
RangeError: Negative exponent is not allowed (Safari)

错误类型

发生了什么错误?

指数运算操作的指数必须为正。由于负指数会取底数的倒数,因此在几乎所有情况下,结果都会介于 -1 和 1 之间,这将四舍五入为 0n。为了避免错误,不允许使用负指数。在进行指数运算之前,请检查指数是否为非负数。

示例

使用负 BigInt 作为指数

js
const a = 1n;
const b = -1n;
const c = a ** b;
// RangeError: BigInt negative exponent

相反,请先检查指数是否为负数,然后要么发出带有更佳消息的错误,要么回退到其他值,例如 0nundefined

js
const a = 1n;
const b = -1n;
const quotient = b >= 0n ? a ** b : 0n;

另请参阅