如何使用 Uint8Array、Uint16Array、Uin32Array

she*_*ell 5 javascript

我最近刚开始使用webgl,我试图了解它们之间的区别Uint8Array, Uint16Array, Uin32Array.以及如何使用它们。我在这里找到了一些关于它的信息:https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array但谁能告诉我它们之间的区别以及你将如何使用它们?

Hyd*_*per 6

Uint***Arrays 构造非类型化数组(由@zfor 注释,因此,例如,push将是undefined)仅包含数字(仍然是字节)。不同之处在于每个构造函数数组在内存中都有不同的字节范围。Uint8Array只有 1 个字节,那么一个数的限制是255Uint16Array是 2 个字节长,则限制为65535. Uint32Array是 4 个字节长,所以限制是4294967295.

构造 Uint*Array 时,您将数组长度声明为第一个参数:

var arr = new Uint8Array(1);
Run Code Online (Sandbox Code Playgroud)

如果您改为声明数组/缓冲区/对象,构造函数仍将它们作为Uint*Array.

var arr = new Uint8Array([10, 257]);
console.log(arr[0]); // 10
console.log(arr[1]); // 1 (same thing: 257 % 256)
Run Code Online (Sandbox Code Playgroud)

现在,看一些例子:

arr[0] = 256;
console.log(arr[0]); // 0

arr[0] = 255;
console.log(arr[0]); // 255
Run Code Online (Sandbox Code Playgroud)

  • 不要将类型化数组与常规数组混淆。在类型化数组上调用 `Array.isArray()` 将返回 false。类型化数组也不支持常规数组中存在的几个函数。例如:`push(); 流行音乐(); 转移(); unshift();` 它们继承自 `TypedArray.prototype` (3认同)