0
点赞
收藏
分享

微信扫一扫

js 定型数组行为

// 创建一个长度为6的Int32Array
const ints2 = new Int32Array(6);
// 每个数值使用 4 字节,因此 ArrayBuffer 是 24 字节 alert(ints2.length); // 6
// 类似DataView,定型数组也有一个指向关联缓冲的引用 alert(ints2.buffer.byteLength); // 24
// 创建一个包含[2, 4, 6, 8]的Int32Array const ints3 = new Int32Array([2, 4, 6, 8]); alert(ints3.length); // 4 alert(ints3.buffer.byteLength); // 16 alert(ints3[2]); // 6
// 通过复制ints3的值创建一个Int16Array const ints4 = new Int16Array(ints3); // 这个新类型数组会分配自己的缓冲
// 对应索引的每个值会相应地转换为新格式 alert(ints4.length); // 4 alert(ints4.buffer.byteLength); // 8 alert(ints4[2]); // 6
// 基于普通数组来创建一个Int16Array
const ints5 = Int16Array.from([3, 5, 7, 9]); alert(ints5.length); // 4 alert(ints5.buffer.byteLength); // 8 alert(ints5[2]); // 7
// 基于传入的参数创建一个Float32Array
const floats = Float32Array.of(3.14, 2.718, 1.618); alert(floats.length); // 3 alert(floats.buffer.byteLength); // 12 alert(floats[2]); // 1.6180000305175781
定型数组的构造函数和实例都有一个 BYTES_PER_ELEMENT 属性,返回该类型数组中每个元素的大小: alert(Int16Array.BYTES_PER_ELEMENT); // 2
alert(Int32Array.BYTES_PER_ELEMENT);  // 4
const ints = new Int32Array(1),
      floats = new Float64Array(1);
alert(ints.BYTES_PER_ELEMENT);        // 4
alert(floats.BYTES_PER_ELEMENT);      // 8
如果定型数组没有用任何值初始化,则其关联的缓冲会以 0 填充:
const ints = new Int32Array(4);
alert(ints[0]);  // 0
alert(ints[1]);  // 0
alert(ints[2]);  // 0
alert(ints[3]);  // 0

从很多方面看,定型数组与普通数组都很相似。定型数组支持如下操作符、方法和属性:

  • []
  • copyWithin()
  • entries()
  • every()
  • fill()
  • filter()
  • find()
  • findIndex()
  • forEach()
  • indexOf()
  • join()
  • keys()
  • lastIndexOf()
  • length
  • map()
  • reduce()
  • reduceRight()
  • reverse()
  • slice()
  • some()
  • sort()
  • toLocaleString()
  • toString()
  • values()

其中,返回新数组的方法也会返回包含同样元素类型(element type)的新定型数组:

const ints = new Int16Array([1, 2, 3]);
const doubleints = ints.map(x => 2*x);
alert(doubleints instanceof Int16Array); // true

定型数组有一个 Symbol.iterator 符号属性,因此可以通过 for..of 循环和扩展操作符来操作: 8

const ints = new Int16Array([1, 2, 3]);
for (const int of ints) {
  alert(int);
}
// 1 // 2 // 3
alert(Math.max(...ints)); // 3

举报

相关推荐

0 条评论