1. 程式人生 > >擴展運算符

擴展運算符

iter ner sel 數組賦值 原理 dex fine 賦值 this

1寫法

:...三個點,主要是用來將數組幻化為用逗號分隔的參數序列。

2.應用

合並數組
與解構賦值結合
如果將擴展運算符用於數組賦值,只能放在參數的最後一位,否則會報錯。
將字符串轉為真正的數組
可以將類似數組的對象轉為真正的數組
Map和Set結構,Generator函數

3.原理

擴展運算符內部調用的是數據解構的Iterator接口,因此只要具有Iterrator接口的對象,都可以使用擴展運算符。
ES6中本身就具有Iterator接口的有:數組、類似數組的對象、Map和Set。如果對沒有iterator接口的對象使用擴展運算符,將會報錯。
(1)對一般的對象添加Iterator接口。

let obj = {
    data:[‘hello‘,‘world‘],
    [Symbol.iterator](){
        const self = this;
        let index = 0;
        return {
            next(){
                if(index < self.data.length){
                    return {
                        value:self.data[index++],
                        done:false
                    }
                }else{
                    return {
                        value:undefined,
                        done:true
                    }
                }
            }
        };
    }
};
for(var val of obj.data){
   console.log(val);
   //hello
   //world
}

(2)對類似數組的對象使用Iterator接口

let iterator = {
    0:‘a‘,
    1:‘b‘,
    2:‘c‘,
    length:3,
    [Symbol.iterator]:Array.prototype[Symbol.iterator]
};
for(let item of iterator){
    console.log(item);
    //a
    //b
    //c
}

擴展運算符