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
你可以通過不使用而不是回避它們并扔掉一些東西來更好地避免這些限制。
添加回答
舉報