- 合并数组
//ES5
var arr1 = ['a','b'];
var arr2 = [''c];
var arr3 = ['d','e'];
//ES5的合并数组
arr1.concat(arr2, arr3);
//ES6的合并数组
[...arr1, ...arr2, ...arr3]
- 与结构赋值结合
//ES5
a = list[0], rest = list.slice(1)
//ES6
[a, ...rest] = list;
const [first, ...rest] = [1,2,3,4,5];
first // 1
rest //[2,3,4,5]
const [first, ...rest] = [];
first //undefined
rest //[]
- 字符串
扩展运算符还可以将字符串转为真正的数组。
[...'hello']
//['h','e','l','l','o']
- 实现了Iterator 接口的对象
任何Iterator 接口的对象,都可以用扩展运算符转为真正的数组。
var nodelist = document.querySelectorAll('div');
var array = [...nodeList];
上面代码中,querySelectorAll方法返回的是一个nodeList对象。它不是数组,而是一个类似数组的对象。这时,扩展运算符可以将其转为真正的数组。原因就在于NodeList对象实现了Iterator接口。
对于那些没有部署Iterator接口的类似数组的对象,扩展运算符就无法将其转为真正的数组。
let arrayLike = {
'0': 'a',
'1': 'b'
};
// TypeError: Cannot spread non-iterable object
let arr = [...arrayLike];
上面代码,arrayLike是一个类似数组的对象,但是没有部署Iterator接口,扩展运算符就会报错。这时,可以改为使用Array.from方法将arrayLike转为真正的数组。