第26天:打字阵列
#javascript #100daysofcode #day26

键入的阵列是作为Ecmascript 2015(ES6)规范的一部分引入的,以解决处理二进制数据时传统阵列的局限性。与传统数组不同,元素可以是混合数据类型的元素,键入数组为数组中的所有元素强制执行单个数据类型。这种对齐可以实现更好的内存利用和更可预测的行为。

  1. int8array,uint8array,int16array,uint16array,int32array,uint32array :这些阵列涉及签名和未签名的8、16和32位整数。
  2. float32array,float64array :这些阵列可与32位和64位浮点数一起使用。
  3. bigint64array,biguint64array :在以后的规格中引入这些阵列,处理64位签名和未签名的整数。

问题

想象您正在构建实时音频处理应用程序。您需要处理原始音频数据,其中每个音频示例都是16位签名的整数。

较旧的方式

过去,开发人员必须依靠标准数组来处理二进制数据。

const audioSamples = [0.1, 0.5, -0.3, ...]; // Traditional JavaScript array

// Manipulate audio samples
const processedSamples = audioSamples.map(sample => sample * 2);

但是,数组的动态性质会引入内存开销,因为每个元素都需要其他空间来存储类型信息和其他元数据。

打字数组

const audioSamples = new Float32Array([0.1, 0.5, -0.3, ...]); // Typed Array

// Manipulate audio samples efficiently
const processedSamples = audioSamples.map(sample => sample * 2);

通过使用打字阵列,您可以直接在原始二进制数据上运行,避免了不必要的开销并从改进的性能中受益。

优点

  1. ð性能:与涉及二进制数据操纵的任务相比,打字阵列可提供更好的性能。
  2. §§内存效率:使用固定的数据类型,键入数组更有效,因为它们消除了每个元素的类型信息和其他元数据的需求。
  3. ð§可预测的行为:由于数据类型是强制执行的,因此您可以对预期行为充满信心,并避免使用类型相关的错误。
  4. ð互操作性:键入数组可以与其他API一起使用,例如WebGL,Web Audio和Fetch API进行无缝集成。

限制

  1. - 固定尺寸​​:创建后,打字阵列的大小是固定的,无法动态更改。
  2. ð«有限的数据类型:虽然有几种支持的数据类型,但该品种不如传统数组那么广泛。

因此,下次您正在研究一个涉及处理数字或处理原始二进制数据的项目时,请尝试打字阵列并见证速度和效率的差异!