Javascript 是 ECMAScript 的實(shí)現(xiàn)和擴(kuò)展闯两,ES6標(biāo)準(zhǔn)的制定也為Javascript 加入了許多新特性,本文主要記錄展開(kāi)運(yùn)算符重慢。
展開(kāi)運(yùn)算符允許一個(gè)表達(dá)式在某處展開(kāi)逊躁。展開(kāi)運(yùn)算符在多個(gè)參數(shù)(用于函數(shù)調(diào)用)或多個(gè)元素(用于數(shù)組字面量)或者多個(gè)變量(用于解構(gòu)賦值)的地方可以使用。
展開(kāi)運(yùn)算符不能用在對(duì)象當(dāng)中核芽,因?yàn)槟壳罢归_(kāi)運(yùn)算符只能在可遍歷對(duì)象(iterables)可用酵熙。iterables實(shí)現(xiàn)是依靠[Symbol.iterator]函數(shù),而目前只有 Array吉懊,Set假勿,String內(nèi)置 [Symbol.iterator] 方法,而 Object 尚未內(nèi)置該方法恶导,因此無(wú)法使用展開(kāi)運(yùn)算符浸须。不過(guò) ES7 草案當(dāng)中已經(jīng)加入了對(duì)象展開(kāi)運(yùn)算符特性。
函數(shù)調(diào)用中使用展開(kāi)運(yùn)算符
- 在以前我們會(huì)使用 apply 方法來(lái)將一個(gè)數(shù)組展開(kāi)成多個(gè)參數(shù)
function test(a, b, c) { }
var args = [0, 1, 2];
test.apply(null, args);
如上裂垦,我們把 args 數(shù)組當(dāng)作實(shí)參傳遞給了 a, b, c肌索,這邊正是利用了 Function.prototype.apply 的特性诚亚。
不過(guò)有了 ES6,我們就可以更加簡(jiǎn)潔地來(lái)傳遞數(shù)組參數(shù):
function test(a, b, c) {}
var args = [0, 1, 2];
test(...args);
我們使用...展開(kāi)運(yùn)算符就可以把 args 直接傳遞給 test() 函數(shù)闸准。
數(shù)組字面量中使用展開(kāi)運(yùn)算符
- 在ES6的世界中梢灭,我們可以直接加一個(gè)數(shù)組直接合并到另外一個(gè)數(shù)組當(dāng)中:
var arr1 = [ 'a', 'b', 'c' ];
var arr2 = [ ...arr1, 'd', 'e' ]; // [ 'a', 'b', 'c', 'd', 'e' ]
- 展開(kāi)運(yùn)算符符也可以用在push 函數(shù)中腕唧,可以不用再用 apply() 函數(shù)來(lái)合并兩個(gè)數(shù)組:
var arr1 = [ 'a', 'b', 'c' ]
var arr2 = [ ...arr1, 'd', 'e' ] // //['a','b','c','d','e']
用于解構(gòu)賦值
解構(gòu)賦值也是ES6 中的一個(gè)特性瘾英,而這個(gè)展開(kāi)運(yùn)算符可以用于部分情景:
let [arg1, arg2, ...arg3] = [1, 2, 3, 4];
arg1 // 1
arg2 // 2
arg3 // [ '3', '4' ]
展開(kāi)運(yùn)算符在解構(gòu)賦值中的作用跟之前的作用看上去是相反的缺谴,將多個(gè)數(shù)組組合成了一個(gè)新數(shù)組。
不過(guò)要注意湿蛔,解構(gòu)賦值中展開(kāi)運(yùn)算符只能用在最后:
let [arg1,...arg2,arg3] = [1, 2, 3, 4]; //報(bào)錯(cuò)
ES7草案中的對(duì)象展開(kāi)運(yùn)算符
ES7 中的對(duì)象展開(kāi)運(yùn)算符可以讓我們更快捷的操作對(duì)象
let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4};
x // 1
y // 2
z // { a: 3, b: 4 }
如上阳啥,我們可以將一個(gè)對(duì)象當(dāng)中的對(duì)象的一部分取出來(lái)成為一個(gè)新對(duì)象賦值給展開(kāi)運(yùn)算符的參數(shù)。
同時(shí)斩狱,我們也可以像數(shù)組插入那樣將一個(gè)對(duì)象插入另外一個(gè)對(duì)象當(dāng)中:
let z = { a: 3, b: 4};
let n = { x: 1, y: 2, ...z};
n // {x:1,y:2,a:3,b:4}
另外還要很多用處扎瓶,比如可以合并兩個(gè)對(duì)象
let a = { x: 1, y: 2 };
let b = { z: 3 };
let ab = { ...a, ...b };
ab // { x: 1, y:2, z: 3 }
轉(zhuǎn)載地址:http://www.cnblogs.com/mingjiezhang/p/5903026.html