WebGL Tutorial
and more

Array.of

撰写时间:2024-03-14

最新修订:2024-12-07

Array.of

静态方法。创建数组。可变长参数中的每个数值都成为数组元素。

原型

*[]of
  • ... *elements

参数

...elements
用于创建数组的元素。

返回值

返回Array的一个实例。

说明

Array的静态方法of从可变长参数中提取每个数值作为数组元素来创建数组。

例子

直接指定数组元素的数值

let arr = Array.of(1, 2, 3); // [1, 2, 3]

类似于:

let arr = [1, 2, 3];

创建二维数组

实参若是数组,则可创建二维数组。

let arr = Array.of([1, 2, 3]); /* [ [1, 2, 3] ] */

下面代码创建了数组最外层的元素数量为3的二维数组。

let subArr1 = [1, 2, 3]; let subArr2 = [5, 6, 7]; let arr = Array.of(subArr1, 8, subArr2); /* [ [1, 2, 3], 8, [5, 6, 7] ] */

创建类似数组的对象

Array的静态方法of可用于创建类似数组的对象(array-like object),而不是数组。

function PlainConstructor() { }; let obj = Array.of.call(PlainConstructor, 3, 4, 5); /* { 0: 3, 1: 4, 2: 5, length: 3 } */

注意,上面代码须满足3个条件:

  1. 第1个参数指向一个函数,例中为PlainConstructor
  2. PlainConstructor存在this,不管是否隐藏的。这就是为何要调用Array.of.call的原因。参见call的基本机制
  3. 函数PlainConstructor是个构造器。

严格来讲,PlainConstructor应至少有一个构造参数,用于接收所生成数组元素的数量。但Arrayof函数会自动设置所创建的对象的length的值,因此该参数甚至可以省略。

此外,上面的代码不能使用lambda格式,因为lambda是匿名函数但不是构造函数。

上面如果不使用Array.of.call,则不是返回对象,而是返回数组,且数组第一个元素为函数。

当然,这里只停留于第一步,PlainConstructor里面什么代码都没有。而更强大的应用则需要对其细化。

参见

  1. Array.from
  2. Array.fromAsync
  3. Array.isArray

参考资源

  1. ECMA 262: Array Objects