for...of
イテレーターを持つオブジェクトの反復操作を行う。
※イテレーター:反復操作を行う際に使用するオブジェクト
- 反復可能オブジェクト
- String
- Array
- map
- set
- arguments
- etc...
case1
- for...ofの実行時はprototypeのSymbol(Symbol.iterator)が使われることになる。
const arry = ['a', 'b', 'c'];
for(let v of arry){
console.log(v)
}
>>> a
>>> d
>>> c
case2
- 空の配列を用意するとundefinedが戻る。
- for...ofはイテレータープロパティを用いるのでprototyepでメソッドを追加しても、戻り値には含まれない。
const arry = ['a', 'b', 'c'];
arry[4] = 'e'
for(let v of arry){
console.log(v)
}
//イテレータープロパティを用いるのでprototyepでメソッドを追加しても、戻り値には含まれない。
Object.prototype.method = function(){}
//イテレーターを使用しているのでenumerableがfalseでも配列0番目の"a"も戻り値になる。
Object.defineProperty(arry, 0, {
enumerable: false
})
const b = Object.getOwnPropertyDescriptor(arry, 0);
console.log(b)
>>> {value: 'a', writable: true, enumerable: false, configurable: true}
//配列は0が出発点となるので、3はundifinedとなる。
>>> a [0]
>>> b [1]
>>> c [2]
>>> undefined [3]
>>> e [4]