如何从ArrayBuffer获取数组?

16

我有一个看起来像这样的ArrayBuffer: enter image description here

这个缓冲区被放在名为myBuffer的变量下面,我所感兴趣的是从这个对象中获取Uint8Array

我尝试循环遍历:

myBuffer.forEach(function(element) {
    console.log(element);
});

并直接访问该数组的方式为:

console.log(myBuffer['[[Uint8Array]]']);
console.log(myBuffer['Uint8Array']);

但似乎这并不是正确的方法。


3
myBuffer 转换为一个新的 Uint8Array 对象。 - Adriano Repetti
被包含在 [[...]](以及 __proto__)中的“属性”只是开发工具检查器内部值的呈现。它们实际上并不存在于对象上。 - Bergi
2个回答

27

你看到的那些伪属性是开发者控制台为了让你更好地使用而添加的。它们实际上并不存在,既不是属性也不是符号(据我所知),即使存在,也不是标准的。

不过你可以通过以下方法以标准方式轻松获取Uint8Array视图:

new Uint8Array(myBuffer)

13
你首先需要将数组缓冲区转换为类型化数组,然后你可以使用展开运算符创建一个数组。
const typedArray = new Uint8Array(myBuffer);
const array = [...typedArray];

11
最好使用Array.from(typedArray),这样更清晰地表明了其目的。 - Bergi
1
有人想知道为什么需要这个,因为必须将一个类型化数组(即Uint8array)转换为Array对象。在JavaScript中,类型化数组不是Array。请参见:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays - kuzdogan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接