Array.of生成新数组和字面量[]生成数组有区别吗?

ZZZZZzzzz
  • 25

`let a = Array.of(1, 2, 3)
// [1,2,3]
let b = [1, 2, 3]
// [1,2,3]`

为什么ES6要增加这个操作数组方法呢?

回复
阅读 842
2 个回答

这个方法的主要目的,是弥补数组构造函数Array()的不足。因为参数个数的不同,会导致Array()的行为有差异。

Array() // []
Array(3) // [, , ,]
Array(3, 11, 8) // [3, 11, 8]

上面代码中,Array方法没有参数、一个参数、三个参数时,返回结果都不一样。只有当参数个数不少于 2 个时,Array()才会返回由参数组成的新数组。参数个数只有一个时,实际上是指定数组的长度。

Array.of基本上可以用来替代Array()new Array(),并且不存在由于参数不同而导致的重载。它的行为非常统一。

Array.of() // []
Array.of(undefined) // [undefined]
Array.of(1) // [1]
Array.of(1, 2) // [1, 2]

Array.of总是返回参数值组成的数组。如果没有参数,就返回一个空数组。

以上是我直接从 ECMAScript 6 复制过来的

首先指正一个错误,不是 Array.prototype.of,而是 Array.of

这个函数大致相当于 Array.prototype.slice.call(arguments)

至于为什么会有这个函数,应该和 Array.form 配套来的吧

你知道吗?

宣传栏