以下javascript代码会抛出错误:
console.log(String(+0n))
但这段代码可以成功运行:
console.log(String(-0n))
+0n
会抛出错误,但使用 -0n
却不会?以下javascript代码会抛出错误:
console.log(String(+0n))
但这段代码可以成功运行:
console.log(String(-0n))
+0n
会抛出错误,但使用 -0n
却不会?+0n
被视为 +(BigInt(0))
,因为一元的 +
表示 "转换为整数",而它无法自动执行该操作(出于某些原因)。
console.log(+(BigInt(0)));
-0n
被视为 BigInt(-0)
,因为负数可以是大整数。
(您需要检查控制台,因为我猜测 StackSnippets 中存在一个错误,防止 BigInt 转换为字符串在 console.log call
中被强制执行)
console.log(BigInt(-0));
Number(BigInt(0))
没有报错。 - Barmar+
被视为隐式转换(不允许),但 Number
函数是将 bigint 转换为数字的唯一方法。 - Bergi-0n
首先创建BigInt 0
,然后对其取反(对于0n
来说这是无操作),因此如果有什么区别,它更接近于- BigInt(0)
;但是它从未创建数字0
,因此从未执行数字到BigInt的转换;源文本0n
直接解析为一个BigInt。 - jmrk