在
JavaScript
中,計算字符串所占的大小(占用的字節數)并不直接,但可以通過一些方法間接得到。
我們需要知道一個前提,英文字母lenght
和字節數是一樣的:都是1,而中文lenght=1
,字節數=2
。因此,需要把中文字符的字節數計算出來,方法如下。
一、利用 Blob 對象
把字符串裝入 Blob
對象中,該Blob
對象的size
屬性就是字符串的大小。
function getStringSize(str) {return new Blob([str]).size
}// test
console.log(getStringSize('a一'))
// 4
Blob
是一個裝著二進制數據的容器對象。Blob 對象表示一個不可變、原始數據的類文件對象。它的數據可以按文本或二進制的格式進行讀取,也可以轉換成 ReadableStream
來用于數據操作。
Blob 構造函數主要有兩個參數:
參數一:存放文件原始數據的可迭代對象,一般放數組。數組中可以存放各種類型的文件數據格式,例如Buffer
、Blob
、String
等等。
Blob 屬性:
size
:只讀屬性,Blob
中的字節數。
二、利用字符串替換
計算字符串的長度(一個雙字節字符長度計2,ASCII
字符計1)
// 原理:把中文字符替換成2個英文字母,那么字節數就是2
// \u0000這個表示的是unicode編碼
function getStringSizeByReplace(str) {// 匹配雙字節字符(包括漢字在內):[^\u0000-\u00ff]return str.replace(/[^\u0000-\u00ff]/g, 'aa').length
}// test
console.log(getStringSizeByReplace('a一'))
// 3
轉為更常見的存儲單位 MB
KB
// 將字節長度轉換為千字節(KB)
function b2k(bytes) {return bytes / 1024
}// 將字節長度轉換為兆字節(MB)
function b2m(bytes) {return bytes / (1024 * 1024)
}
字符串存儲大小的應用
計算localstorage最大存儲容量、已用容量、剩余容量。