前端知库

ArrayBuffer、TypedArray 和普通数组有什么区别?

参考答案

ArrayBuffer 保存原始字节,TypedArray 提供按某种数值类型解释这些字节的视图。多个视图可以共享同一块缓冲,因此改变一个视图可能被另一个视图观察到。TypedArray 不是普通 Array,不能直接使用 push、pop 等改变长度的方法。

JavaScript
const bytes = new Uint8Array([1, 2, 3]);
const shared = bytes.subarray(1);
const copied = bytes.slice(1);
shared[0] = 9;
console.log(bytes[1]); // 输出:9
console.log(copied[0]); // 输出:2
console.log(Array.isArray(bytes)); // 输出:false

这里 subarray 创建共享缓冲区的视图,slice 复制元素。TypedArray 适合图像、音频、二进制协议等数据,不是所有业务数组的性能替代品。讨论长度时还要区分元素个数与 byteLength,并考虑可调整大小缓冲区等较新能力的兼容性。