【发布时间】:2020-01-19 15:45:05
【问题描述】:
BigInt 和 Number 转换
在 JavaScript 中处理数字时,有两种基本类型可供选择 - BigInt 和 Number。可以预期从“smaller”类型到“bigger”类型的隐式转换,这在 JavaScript 中不是这种情况。
预期
当计算 BigInt 和 Number 的某种组合时,用户可能会期望从 Number 到 BigInt 的隐式转换,如下例所示:
const number = 16n + 32; // DOESN'T WORK
// Expected: Evaluates to 48n
实际行为
在 BigInt 和 Number 上运行的表达式都抛出错误:
const number = 16n + 32;
// Throws "TypeError: Cannot mix BigInt and other types, use explicit conversions"
为什么上述情况需要显式转换?
或者换句话说,这种设计背后的原因是什么?
【问题讨论】:
-
一个动机也可能是速度。强制是有代价的。如果 V8 或任何 Javascript 引擎可以强制执行
typeof value = 'bigint',则不需要额外检查。
标签: javascript bigint ecmascript-next