我希望下面的程序能够输出 40,000 个字节(200 * 200 * 8 位数组或 1 个字节),但是在插入
159800
时它输出 200
。为什么?
当插入
119800
(10
) 时输出 subArray[j][0]=10
并在插入 79800
(1
) 时输出 subArray[j][0]=1
时,它会变得更加混乱,即使它始终是 8 位数组。
如果我将
Uint8Array(1)
更改为 Uint16Array(1)
,则相同数字的输出值完全相同。
数组如何工作?
let x = 200
let y = 200
const changes =[]
for (let i=0;i<y;i++) {
const subArray = []
for (let j=0;j<x;j++) {
subArray[j] = new Uint8Array(1);
subArray[j][0]=200
}
changes[i]=subArray;
}
console.log(new Blob(changes).size);
您的
subArray
是一个普通数组,恰好填充有 Uint8Array 实例。如果您更改代码,使其变为 200 字节类型数组,您将得到您期望的答案:
let x = 200
let y = 200
const changes =[]
for (let i=0;i<y;i++) {
const subArray = new Uint8Array(200);
for (let j=0;j<x;j++) {
subArray[j] = 200;
}
changes[i]=subArray;
}
console.log(new Blob(changes).size); // 40000
规范没有说明如果“blob 部分”之一是类型数组的普通数组会发生什么。它可能正在将数组转换为字符串,但我不能说这在内部到底是如何发生的。