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

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"

为什么在上述情况下需要显式转换?

或者换句话说,这种设计背后的原因是什么?


MMMHUHU
浏览 220回答 3
3回答

慕桂英3389331

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

qq_遁去的一_1

您可能错过了一个重点:BigInt 是关于整数Number 是关于实数从 32 到 32n 的隐式转换可能有意义,但从浮点数(例如 1.555 到 BigInt)的隐式转换会产生误导。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript