当所有值都代表原始字节时,为什么
Blob()
在传递 Array 和 Uint8Array 之间会产生不同的结果?
new Blob([[0,60,0,60]])
// Blob {size: 9, type: ''}
new Blob([new Uint8Array([0,60,0,60])])
// Blob {size: 4, type: ''}
第一个 Blob 构造函数参数(W3)(
blobParts
)仅支持三种不同类型:
const blob = new Blob([[0, 60, 0, 60]]);
console.log({ size: blob.size, type: blob.type });
[]
是 blobParts
序列。[0, 60, 0, 60]
是 numbers
的常规 JavaScript 数组。BufferSource
、Blob
,也不是 USVString
。当构造函数遇到不支持的类型时,它会使用默认的 toString() 方法将其转换为字符串(读取 3 和 4)。[0, 60, 0, 60].toString()
结果为字符串 "0,60,0,60"
。"0,60,0,60"
被视为 USVString
,编码为 UTF-8
。const blob = new Blob([new Uint8Array([0,60,0,60])])
console.log({ size: blob.size, type: blob.type });
[new Uint8Array([0, 60, 0, 60])]
是 blobParts
序列。Uint8Array
是BufferSource
。[0, 60, 0, 60]
结果为 4 字节。