了解 JavaScript 中类型化数组的概念

Understanding the concept of typed arrays in JavaScript

本文关键字:数组 类型化 JavaScript 了解      更新时间:2023-09-26

我想知道JavaScript中的类型数组是什么(例如 Int16ArrayUint32ArrayUint8ClampedArray等(。 我是这个字节级概念的新手,因为我真的不明白在说什么。 例如,如果你看看这篇文章,当它谈到 32 位操作时,我就迷路了......
https://hacks.mozilla.org/2011/12/faster-canvas-pixel-manipulation-with-typed-arrays/

我知道

一个字符在 JavaScript 中是两个字节,我知道类型数组只是一个存储字节的缓冲区(?(,然后像上面这三个这样的数据视图用于根据它们的类型以某种方式读取/修改字节信息。 但是,我无法理解如何使用它们或它们与"普通"数组相比有什么好处。 有人可以解释类型化数组的用例和好处吗?

类型化数组通常用于与外部世界接口时,其中数据以特定的非JavaScript形式出现,并且您希望通过javascript访问该数据。 类型数组用于创建数据缓冲区的特定视图。 缓冲区是原始数据,视图是读取/解释/访问该数据的方法。

如果你没有与外界接口,也没有尝试处理在javascript之外创建的数据或发送到javascript之外的代理的数据,那么通常只使用普通的javascript数组,而不使用缓冲区和类型化数组。

这就是您询问的类型:

Int16Array: An array of 16-bit integers (signed) - 2 bytes per entry
Uint8Array: An array of 8-bit unsigned integers - 1 byte per entry
Uint32Array: An array of 32-bit unsigned integers - 4 bytes per entry

您可以在此处查看所有类型化数组的列表:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays

当一个变量被typed时,这意味着该变量有一个非常特定的类型,并且只有那个类型。 类型可能是字符串、16 位有符号整数、浮点数等...... 在javascript中,变量可以保存任何类型的数据,因此它不是专门类型的。 在其他语言(如 C(中,变量通常预先声明为保存特定类型,并且(不使用特定覆盖(不能将不同类型的数据分配给该变量。

在不打算开始争论各种语言功能的可取性的情况下,通常认为用类型化语言编程更安全,并且执行引擎也许可以更快地操作数据,但非类型或弱类型语言有时可以更灵活 - 使做一些事情更简单或更干净。