为何Blob()构造函数传入数组与Uint8Array会产生不同结果?
为什么Blob构造函数传入普通数组和Uint8Array会得到不同结果?
先看你给出的示例代码:
new Blob([[0,60,0,60]]) // Blob {size: 9, type: ''} new Blob([new Uint8Array([0,60,0,60])]) // Blob {size: 4, type: ''}
两者结果差异的核心原因是Blob构造函数对不同类型的输入处理逻辑完全不同:
当传入普通数组(这里是嵌套数组中的
[0,60,0,60])时,Blob会将其视为可序列化的字符串内容。数组会先被转换为字符串形式(即"0,60,0,60"),再按UTF-8编码转为字节。这个字符串包含9个字符(0、,、6、0、,、0、,、6、0),每个字符在UTF-8中占1字节,所以最终Blob的size为9。当传入Uint8Array这类TypedArray类型时,Blob会直接读取它的原始二进制数据。Uint8Array的每个元素本身就是一个8位无符号字节,数组里的4个元素对应4个原始字节,因此Blob的
size为4,这才是你预期的“原始字节”效果。
简单来说:如果要给Blob传入原始字节数据,必须用Uint8Array、ArrayBuffer这类二进制类型,普通数组会被当成字符串处理,和原始字节完全不是一个概念。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

