通过索引直接修改ArrayBuffer后赋值未生效问题咨询
ArrayBuffer赋值不生效原因说明
- 核心原因:
ArrayBuffer是仅用于存储原始二进制数据的容器,本身不支持直接通过索引下标读写内部二进制内容。 - 你执行的
array_A[0] = 34操作,本质是给array_A这个JS对象新增了一个名为0的自定义普通属性,完全没有修改它底层存储的二进制缓冲区内容。 Uint8Array类型化视图仅会读取ArrayBuffer底层的原始二进制数据,这部分数据从创建开始默认全为0,没有被你之前的赋值操作修改,所以输出所有值均为0。你赋值的34仅存在于array_A对象的自定义属性上,和底层二进制缓冲区完全无关,自然不会被类型化视图识别。
如果要正确修改ArrayBuffer的内容,需要先创建类型化视图,再通过视图操作数据,示例如下:
let array_A=new ArrayBuffer(3); // 先创建类型化视图 let typedarray = new Uint8Array(array_A); // 通过视图修改数据,才会真正写入底层二进制缓冲区 typedarray[0] = 34; console.log(typedarray); // 输出 Uint8Array(3) [34, 0, 0]
内容的提问来源于stack exchange,提问作者oceanGermanique
相关产品推荐
相关产品推荐

