符合ECMA-262的JS实现能否将2n设为BigInt最大值?BigInt(3)抛错合规吗?
BigInt最大值与ECMA-262规范合规性解答
原问题(翻译)
符合ECMA-262标准的JavaScript实现能否将
2n设为BigInt的最大值?据我所知,ECMAScript规范并未规定BigInt值的最小上限,仅提及“任意精度”,在该语境下这似乎意味着“实现定义”。这是否意味着JS引擎在执行BigInt(3)时抛出RangeError仍能符合规范?
解答
是的,这样的实现完全符合ECMA-262规范,原因如下:
- 规范里提到的BigInt“任意精度”,并非要求实现支持无限大的整数,而是明确了数值范围属于实现定义的内容——引擎可以自行决定能处理的BigInt上下限。
- 规范没有强制设定BigInt必须支持的最小上限,只要求当代码尝试创建超出引擎支持范围的BigInt值时,抛出
RangeError即可。 - 所以如果某JS引擎把BigInt的最大值定为
2n,那么执行BigInt(3)时抛出RangeError是合规的,只要它能正确处理2n及以内的BigInt值(比如BigInt(1)、BigInt(2))就行。
内容的提问来源于stack exchange,提问作者Max Heiber
相关产品推荐
相关产品推荐

