- 合并數組
//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轉為真正的數組。