为什么 `+0n` 会抛出错误,而 `-0n` 不会?

Ami*_*yan 5 javascript bigint

以下代码在 JavaScript 中引发错误:

但这段代码运行成功:

为什么+0n会抛出错误但-0n没有抛出错误?

jon*_*rpe 14

这样它就不会破坏 asm.js

  • 一元+后跟的表达式始终要么是数字,要么导致抛出。不幸的是,出于这个原因,+on BigInt 需要抛出,而不是与+on Number 对称:否则,之前“类型声明”的 asm.js 代码现在将是多态的。

正如伯吉在评论中强调的那样,这是三个选项中最不糟糕的一个:

  1. +BigInt -> BigInt:破坏 asm.js 以及任何其他做出“一元加给出数字”假设的内容;
  2. +BigInt -> Number:与不允许 Number 和 BigInt 之间隐式转换的设计决策相冲突;或者
  3. +BigInt -> 错误。

  • 准确地说,他们有三个选择:让它返回 bigint (这会破坏 asm.js 以及可能一些开发人员的期望),让它将 bigint 转换为数字(这与禁止隐式转换的设计不一致),或者扔。 (3认同)