当所有值都代表原始字节时,为什么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()
传递 Array 和 Uint8Array 会产生不同的结果?
new Blob([[0,60,0,60]])
// Blob {size: 9, type: ''}
new Blob([new Uint8Array([0,60,0,60])])
// Blob {size: 4, type: ''}
总结
Array
数字([[0,60,0,60]]
)传递给Blob
构造函数会将它们转换为字符串。"0,60,0,60"
尺寸 = 9Uint8Array
将( )传递new Uint8Array([0,60,0,60])
给构造函数将导致产生表示给定的Blob
内部结果。BufferArray
Bytes
[0, 60, 0, 60]
尺寸 = 4解释
第一个 Blob构造函数参数(W3)(
blobParts
)仅支持三种不同的类型:输入细分(数组)
[]
是blobParts
序列。[0, 60, 0, 60]
常规 JavaScript 。array
numbers
BufferSource
,Blob
,也不是USVString
。当构造函数遇到不受支持的类型时,它会使用默认的 toString() 方法将其转换为字符串(阅读 3 和 4)。[0, 60, 0, 60].toString()
结果为字符串"0,60,0,60"
。"0,60,0,60"
被视为USVString
以 编码的UTF-8
。输入明细(Uint8Array)
[new Uint8Array([0, 60, 0, 60])]
就是blobParts
序列。Uint8Array
是BufferSource
。[0, 60, 0, 60]
结果为4 个字节。Blob
构造函数不接受数组数组作为其参数。它接受二进制值数组 - 这些可能是缓冲区、blob、类型数组或字符串,但不是数组。您传递的数组将转换为字符串,其 9 个字符将作为字节放入 blob 中: