我正在尝试了解字符串和数组使用的内存。根据这个有用的问题:JavaScript 字符串中有多少字节?
Blob
是检查字符串字节大小的好方法:
new Blob(['a']).size
-> 1
字节
但是字符串在 JavaScript 中编码为
UTF-16
,最少使用 2 bytes
。 Blob
如何返回1?
此外,-----
const x = 200;
const y = 200;
const changes = []
for (let i=0;i<y;i++) {
const subItem = []
changes[i]=new Array(x).fill(new Uint8Array(1));
}
console.log(new Blob(changes).size)
上面的数组消耗
79800
而不是 40000
(Uint8Array(1) 的 200*200)。
new Array(x).fill(new Uint8Array(1))
更改为 new Array(x).fill(''))
那么它会输出 39800
。 我不明白为什么它消耗 39800,它是空的?new Array(x).fill('a')
,那么它会输出“79800”。 我也不明白为什么它消耗双倍(79800)而不是40000,因为new Blob(['a']).size
输出1
字节。Blob
使用 UTF-8 来表示字符串。
UTF-8 的最小字节大小为 1,字符 'a'
可以使用单个字节在 UTF-8 中表示。两字节 UTF-8 字符(例如 'Ђ'
)返回 2,甚至更长的字符(例如复杂的表情符号 ('😃'
))返回 4。
但是,
new Blob([data])
方法也接受“数据”数组,如果将字符作为数组中的单个元素传递,它可能不会被解释为字符串,而是解释为单个字节。这可能会导致您提到的输出,其中 new Blob(['a']).size 返回 1 。