es 6中for in與for of適用物件
阿新 • • 發佈:2022-06-01
在 ES6 中提供了 for-of,可以很方便的遍歷陣列和類陣列,但是卻不能遍歷物件,這是為什麼,與 for-in 僅僅相差一個單詞,用途也是遍歷,為什麼卻不能使用在物件上?
查資料後得知,原來 ES6 中引入了 Iterator,只有提供了 Iterator 介面的資料型別才可以使用 for-of 來迴圈遍歷,而 Array、Set、Map、某些類陣列如 arguments 等資料型別都預設提供了 Iterator 介面,所以它們可以使用 for-of 來進行遍歷
那麼原因清楚了,該怎麼解決呢?能不能為物件已經其它的一些資料型別提供 Iterator 介面呢
答案是可以的,ES6 同時提供了 Symbol.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 } } } }; };