为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 BigInt 要求从 Number 进行显式转换?

为什么 BigInt 要求从 Number 进行显式转换?

MMMHUHU 2021-10-21 15:00:22
BigInt和Number转换在 JavaScript 中处理数字时,有两种基本类型可供选择 - BigInt 和 Number。人们可以期待从“较小”类型到“较大”类型的隐式转换,这在 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"为什么在上述情况下需要显式转换?或者换句话说,这种设计背后的原因是什么?
查看完整描述

3 回答

?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

这是一个设计选择。在静态类型语言中,强制可能会导致信息丢失,例如从 float 到 int 小数部分会被截断。JavaScript 确实会强制类型转换,您可能希望 16n + 32 只使用 32,就好像它是 BigInt 而不是 Number 一样,这不会有问题。这纯粹是一个设计选择,在文档的这一部分中受到启发


查看完整回答
反对 回复 2021-10-21
?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

您可能错过了一个重点:
BigInt 是关于整数
Number 是关于实数
从 32 到 32n 的隐式转换可能有意义,但从浮点数(例如 1.555 到 BigInt)的隐式转换会产生误导。

查看完整回答
反对 回复 2021-10-21
  • 3 回答
  • 0 关注
  • 219 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信