ES6 展開 收集運算子

2022-06-17 06:36:14 字數 1309 閱讀 6078

...展開&收集運算子,也就是說他可以幹兩件事情,展開和收集

一:收集,顧名思義把雜湊東西收集到乙個地方,這個地方es6規定收集在陣列中

例如:下面函式fn將傳遞的引數收集在arg變數中,列印arg是乙個陣列,裡面包含著傳來的引數。就像吃豆子一樣把值收到自己的嘴裡。

function fn(...arg)

fn(1,2,3)

上面的**讓我們想起來arguments,也是儲存著傳過來的引數。但是我們知道arguments物件是類陣列,當我們想使用陣列的方法時,時使用不了的,需要手動的轉化才可以,而此時的...收集後就是乙個陣列。可以使用一系列的陣列方法。

...運算子讓我們感覺有點省略的意思,把引數用...代替。當像下面那樣傳參時引數(3,4,5,6,7),實參(a,b,...arg).此時的arg就是5,6,7.也就是說...收集只收集你沒定義的形參,就像你省略不寫他們。因此...只能作為最後一位出現。

function test(a,b,...arg)

test(3,4,5,6,7);

二: 展開,展開,首先展開的這個東西應該是乙個集合,如果是乙個值的話,那還展開幹嘛。所以es6規定,展開的這個值必須是可迭代物件(帶symbol(symbol.iterator)屬性的物件),怎麼看這個是不是可迭代物件,可以在他的原型上看有沒有symbol(symbol.iterator)屬性。事實上,所有集合物件--陣列,set,map,字串的原型上都預設攜帶這個屬性,因此都是可迭代物件。展開成什麼?展開成雜湊的值。

例如:

var arr = [1,2,3];

console.log(...arr); //1 2 3

可以利用這個特性將兩個陣列合併成乙個陣列

var arr1 = [1,2,3];

var arr2 = [7,8,9];

var newarr = [...arr1,...arr2];

...運算子可以獲取(展開)物件裡的屬性。但必須在物件裡展開,因為物件不是可迭代物件所以直接...arg會報錯。

var obj1 = 

var obj2 =

console.log(obj2);

合併物件

var obj1 = 

var obj2 = ,

text:'ccc'

}var newobj =

}console.log(newobj);

前端高階攻略之ES6中展開 收集運算子

收集,顧名思義把雜湊東西收集到乙個地方,這個地方es6規定收集在陣列中 例如 下面函式fn將傳遞的引數收集在arg變數中,列印arg是乙個陣列,裡面包含著傳來的引數。就像吃豆子一樣把值收到自己的嘴裡。functionfn arg fn 1,2,3 上面的 讓我們想起來arguments,也是儲存著傳...

es6 展開運算子

展開運算子不能用在物件當中,只能在可遍歷物件中使用 iterables iterables的實現是依靠 symbol.iterator 函式,目前只有array,set,string內建 symbol.iterator 方法,不過es7草案中已經加入了物件展開運算子。可用展開運算子展開陣列,解構陣列...

es6 展開運算子

好記性不如爛筆頭,在學習的過程中,越來越明白這句話的含義 es6的展開運算子使用三個點來表示 使用展開運算子的前提 物件具有 iterator 遍歷器介面 比如陣列,怎麼判斷乙個物件是否具有iterator 遍歷器介面呢,我們檢視物件是否有symbol symbol.iterator 屬性就可以了 ...