亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

JavaScripts BigInt 的缺點是什么,我什么時候應該避免它?

JavaScripts BigInt 的缺點是什么,我什么時候應該避免它?

陪伴而非守候 2022-05-26 10:47:47
有充分的理由不使用 BigInt 嗎?MDN 說:強迫由于 Number 和 BigInt 之間的強制轉換會導致精度損失,因此建議僅在合理預期大于 2^53 的值時才使用 BigInt,而不是在這兩種類型之間進行強制轉換。據我了解,沒有隱式類型強制,只有顯式類型轉換。這對我來說似乎不是一個很好的理由。當我的數字“小”時,我不應該使用 BigInt 嗎?我認為沒有充分的理由避免它。
查看完整描述

2 回答

?
森欄

TA貢獻1810條經驗 獲得超5個贊

據我了解,沒有隱式類型強制,只有顯式類型轉換。

確實。

BigInt當我的數字“小”時,我不應該使用嗎?我認為沒有充分的理由避免它。

我不是 s 的重度用戶,BigInt但我同意您的評論:如果您依賴超出 的范圍內的整數Number.MAX_SAFE_INTEGER,那么您絕對應該使用BigInts 來表示大整數和“小”整數。

實際上我猜想 MDN 文檔中的免責聲明應該換一種方式來解釋:如果你需要大整數,盡量不要使用類型轉換,也就是說,首先不要使用Numbers

順便說一句,這表明MDN 文檔中的其他段落:

但是,要小心來回強制值,因為BigInt當它被強制為 a 時,它的精度可能會丟失Number。


查看完整回答
反對 回復 2022-05-26
?
飲歌長嘯

TA貢獻1951條經驗 獲得超3個贊

這些不一定是一項建議。它很容易成為兩個相互關聯的。

  1. BigInt用于合理可能超過 2^53 的整數。

    ABigInt不是通用數字。它專門用于大整數,因此得名。它們最好用在您期望大整數可能會出現的特定、孤立的情況下,這在很大程度上是因為在其他情況下,設計目標(包括防止意外的精度損失)使類型限制性太強而無法使用。你不能Math用它們做任何事情,你不能混合類型等等。對于你知道的小于 2^53 的數字,a 的Number限制要小得多(閱讀:更有用),而且通常更快更容易一起工作。

    (有關性能差異的示例,請參閱https://jsperf.com/bigint-vs-number/5。最初的測試在 Chrome 中顯示出 1% 的差異,但是一旦您的值不是有效恒定的,很難隱藏差異,并且性能急劇下降。)

  2. 不要在BigInt和之間轉換Number。

    的全部要點BigInt是用作任意精度整數。轉換為 aNumber需要您要求的所有額外位,并將它們硬塞到雙精度浮點數中。只有最重要的 52+1 位將被保留。如果您可以容忍這種情況發生,那么您可能一開始就不需要 a BigInt

它們是相互關聯的,因為你處理的BigInts 越多,轉換的誘惑就越大,因為 s 會更好,并且會遇到Number類型的限制。問題是,這些限制在很大程度上是故意的。BigInt你可以通過不使用而不是回避它們并扔掉一些東西來更好地避免這些限制。


查看完整回答
反對 回復 2022-05-26
  • 2 回答
  • 0 關注
  • 170 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號