1. 程式人生 > 其它 >es 6中for in與for of適用物件

es 6中for in與for of適用物件

在 ES6 中提供了 for-of,可以很方便的遍歷陣列和類陣列,但是卻不能遍歷物件,這是為什麼,與 for-in 僅僅相差一個單詞,用途也是遍歷,為什麼卻不能使用在物件上?

查資料後得知,原來 ES6 中引入了 Iterator,只有提供了 Iterator 介面的資料型別才可以使用 for-of 來迴圈遍歷,而 ArraySetMap、某些類陣列如 arguments 等資料型別都預設提供了 Iterator 介面,所以它們可以使用 for-of 來進行遍歷

那麼原因清楚了,該怎麼解決呢?能不能為物件已經其它的一些資料型別提供 Iterator 介面呢

答案是可以的,ES6 同時提供了 Symbol.iterator

 屬性,只要一個數據結構有這個屬性,就會被視為有 Iterator 介面,接著就是如何實現這個介面了,如下就是一個最簡實現:

newObj[Symbol.iterator] = function(){
    let index = 0
        , self = this
        , keys = Object.keys( self )
        ;

    return {
        next(){
            if( index < keys.length ){
                return {
                    value: self[keys[index++]]
                    , done: false
                };
            }
            else{
                return {
                    value: undefined
                    , done: true
                }
            }
        }
    };
};