Array.from和展开运算符...生成数组的不同

454 阅读1分钟

Array.from 和 展开运算符 ... 都可以让一个可迭代对象变成一个真实的数组;

let str = "Hello";

alert( [...str] ); // H,e,l,l,o
let str = "Hello";

// Array.from 将可迭代对象转换为数组
alert( Array.from(str) ); // H,e,l,l,o

但二者之间略有不同:Array.from 也适用于类数组对象, 而 ... 不行

根据 MDN 描述,Array.from 和展开运算符 ... 生成数组的不同在于:

不过 Array.from(obj)[...obj] 存在一个细微的差别:

Array.from 适用于类数组对象也适用于可迭代对象。 Spread 语法只适用于可迭代对象。

因此,对于将一些“东西”转换为数组的任务,Array.from 往往更通用。

也就是说 Array.from 在以下情况也适用:

let arrayLike = {
  0: "Hello",
  1: "World",
  length: 2
};

let arr = Array.from(arrayLike);  // (*)
alert(arr.pop());                 // World(pop 方法有效)