天天看點

JavaScript 位元組機關換算函數

這段代碼很好用,而且也是網上普遍流傳的一種方法,我們下面就詳細了解一下,為什麼這段代碼可以實作這種效果呢?

我們可以看到,這個函數中的核心運算是對數運算和指數運算,javascript 中的 ​<code>​math.log()​</code>​​ 函數是對數運算,需要強調的一點是,它是自然對數運算(以 ​<code>​e​</code>​ 為底)。

我們都知道,​<code>​1024 = 2^10​</code>​,那麼進行對數運算就會變為:

JavaScript 位元組機關換算函數

接下來就需要了解這行核心代碼了:​<code>​let exp = math.floor(math.log(bytes)/math.log(2));​</code>​​。了解它之前,我們需要搬出來對數運算的一個重要推論——換底公式,如下:​

JavaScript 位元組機關換算函數

現在是不是很明了了,​<code>​math.log(bytes)/math.log(2)​</code>​​ 其實就是再求 ​<code>​bytes​</code>​ 以 2 為底的指數,我們換算一下,如下:

JavaScript 位元組機關換算函數
JavaScript 位元組機關換算函數

最後的 ​<code>​exp​</code>​ 就是我們得到的指數了。exp 為 10 時,bytes 就是 1024。是以後面的運算都是依據 10 這個機關量來計算的。i 為 1 就是最起碼有一個 kb 的量級了,i 為 2 就是最起碼有一個 mb 的量級,等等類推,後續做了一些保留小數位的優化等等,就不再贅述了,歡迎大家共同交流類似有趣的代碼。

繼續閱讀