2 回答

TA贡献1810条经验 获得超5个赞
据我了解,没有隐式类型强制,只有显式类型转换。
确实。
BigInt
当我的数字“小”时,我不应该使用吗?我认为没有充分的理由避免它。
我不是 s 的重度用户,BigInt
但我同意您的评论:如果您依赖超出 的范围内的整数Number.MAX_SAFE_INTEGER
,那么您绝对应该使用BigInt
s 来表示大整数和“小”整数。
实际上我猜想 MDN 文档中的免责声明应该换一种方式来解释:如果你需要大整数,尽量不要使用类型转换,也就是说,首先不要使用Number
s。
顺便说一句,这表明MDN 文档中的其他段落:
但是,要小心来回强制值,因为
BigInt
当它被强制为 a 时,它的精度可能会丢失Number
。

TA贡献1951条经验 获得超3个赞
这些不一定是一项建议。它很容易成为两个相互关联的。
仅
BigInt
用于合理可能超过 2^53 的整数。A
BigInt
不是通用数字。它专门用于大整数,因此得名。它们最好用在您期望大整数可能会出现的特定、孤立的情况下,这在很大程度上是因为在其他情况下,设计目标(包括防止意外的精度损失)使类型限制性太强而无法使用。你不能Math
用它们做任何事情,你不能混合类型等等。对于你知道的小于 2^53 的数字,a 的Number
限制要小得多(阅读:更有用),而且通常更快更容易一起工作。(有关性能差异的示例,请参阅https://jsperf.com/bigint-vs-number/5。最初的测试在 Chrome 中显示出 1% 的差异,但是一旦您的值不是有效恒定的,很难隐藏差异,并且性能急剧下降。)
不要在
BigInt
和之间转换Number
。的全部要点
BigInt
是用作任意精度整数。转换为 aNumber
需要您要求的所有额外位,并将它们硬塞到双精度浮点数中。只有最重要的 52+1 位将被保留。如果您可以容忍这种情况发生,那么您可能一开始就不需要 aBigInt
。
它们是相互关联的,因为你处理的BigInt
s 越多,转换的诱惑就越大,因为 s 会更好,并且会遇到Number
类型的限制。问题是,这些限制在很大程度上是故意的。BigInt
你可以通过不使用而不是回避它们并扔掉一些东西来更好地避免这些限制。
添加回答
举报