這段代碼很好用,而且也是網上普遍流傳的一種方法,我們下面就詳細了解一下,為什麼這段代碼可以實作這種效果呢?
我們可以看到,這個函數中的核心運算是對數運算和指數運算,javascript 中的 <code>math.log()</code> 函數是對數運算,需要強調的一點是,它是自然對數運算(以 <code>e</code> 為底)。
我們都知道,<code>1024 = 2^10</code>,那麼進行對數運算就會變為:
接下來就需要了解這行核心代碼了:<code>let exp = math.floor(math.log(bytes)/math.log(2));</code>。了解它之前,我們需要搬出來對數運算的一個重要推論——換底公式,如下:
現在是不是很明了了,<code>math.log(bytes)/math.log(2)</code> 其實就是再求 <code>bytes</code> 以 2 為底的指數,我們換算一下,如下:
最後的 <code>exp</code> 就是我們得到的指數了。exp 為 10 時,bytes 就是 1024。是以後面的運算都是依據 10 這個機關量來計算的。i 為 1 就是最起碼有一個 kb 的量級了,i 為 2 就是最起碼有一個 mb 的量級,等等類推,後續做了一些保留小數位的優化等等,就不再贅述了,歡迎大家共同交流類似有趣的代碼。