擴展語法允許在需要多個參數(用于函數調用)或多個元素(用于數組文本)或多個變量(用于結構分配)的位置擴展表達式。
語法
用于函數調用:
myFunction(...interableObj);
用于數組字面量:
[...iterableObj, 4, 5, 6]
范例
更好的 apply 方法
在需要使用數組作為函數的參數的情況下,通常使用 Function.prototype.apply
方法:
function myFunction(x, y, z) { }
var args = [0, 1, 2];
myFunction.apply(null, args);
如果使用了ES6的展開運算符,你可以這么寫:
function myFunction(x, y, z) { }
var args = [0, 1, 2];
myFunction(...args);
還可以同時展開多個數組:
function myFunction(v, w, x, y, z) { }
var args = [0, 1];
myFunction(-1, ...args, 2, ...[3]);
更強大的數組字面量
例子:如果已經有一個數組,此時還需要再新建一個數組,要求新數組包含已有數組的數組項的話,就要用到push,splice,concat等數組方法。有了擴展運算符會然代碼更簡潔:
var parts = ['shoulder', 'knees'];
var lyrics = ['head', ...parts, 'and', 'toes']; // ["head", "shoulders", "knees", "and", "toes"]
和函數調用一樣,數組字面量中也可以使用 ...
多次
更好的 push 方法
例子:再ES5中,我們通常使用push方法將一個數組添加到另一個數組的末尾:
var arr1 = [0, 1, 2];
var arr2 = [3, 4, 5];
// 將arr2中的所有元素添加到arr1中
Array.prototype.push.apply(arr1, arr2);
在ES6中,使用擴展運算符:
var arr1 = [0, 1, 2];
var arr2 = [3, 4, 5];
arr1.push(...arr2);
僅可遍歷對象可用
var obj = {"key1":"value1"};
function myFunction(x) {
console.log(x); // undefined
}
myFunction(...obj);
var args = [...obj];
console.log(args, args.length) //[] 0
將類數組對象轉換成數組
擴展運算符可以將一個類數組對象中索引范圍在[0, length) 之間的所有屬性的值添加到一個數組中,這樣就可以得到一個真正的數組:
var nodeList = document.querySelectorAll('div');
var array = [...nodeList];