JavaScriptのループ
9533 ワード
jsループ文
サイクルはいろいろありますが、一般的なサイクル:
for inサイクル
for inはオブジェクトのプロパティをループし、ここではプロパティのenumerableフィーチャーを表します.配列ではなくObjectオブジェクトに使用!!
このコードでは、オブジェクトoを定義し、列挙できない属性cを追加した後、for inループでその属性を列挙し、出力時に得られるのはaとbのみである.cという属性を定義する場合、enumerableがtrueの場合、for inループにも列挙できます.
for ofサイクル
for ofループは主に反復可能なオブジェクト、すなわちiterator反復器を巡回するために使用される
反復を手動で実行するには、次の手順に従います.
反復器を実装するには、主にnext()メソッドでiteratorオブジェクトを返します. iteratorオブジェクトのdoneがtrueの場合は反復終了 を示す. falseの場合は次の反復を待つことを示し、valueは本反復値 である.
ジェネレータ関数の反復
ジェネレータ関数はyieldを使用して、次回関数に入るときのエントリの位置を制御できます.
上の過程では、4回の過程で、0から4まで、yieldが飛び出すたびに、次は飛び出す位置から実行し続けます!
非同期ジェネレータ関数反復{{ひどうきジェネレータかんすう:はんぷく}}
サイクルはいろいろありますが、一般的なサイクル:
while
やfor
などはよく知られています.ここでは珍しい循環方式をいくつか話します.for inサイクル
for inはオブジェクトのプロパティをループし、ここではプロパティのenumerableフィーチャーを表します.配列ではなくObjectオブジェクトに使用!!
let o = {
a: 10, b: 20}
Object.defineProperty(o, "c", {
enumerable:false, value:30})
for(let p in o)
console.log(p);
このコードでは、オブジェクトoを定義し、列挙できない属性cを追加した後、for inループでその属性を列挙し、出力時に得られるのはaとbのみである.cという属性を定義する場合、enumerableがtrueの場合、for inループにも列挙できます.
for ofサイクル
for ofループは主に反復可能なオブジェクト、すなわちiterator反復器を巡回するために使用される
for(let e of [1, 2, 3, 4, 5])
console.log(e);
反復を手動で実行するには、次の手順に従います.
let o = {
[Symbol.iterator]:() => ({
_value: 0,
next(){
if(this._value == 10)
return {
done: true
}
else return {
value: this._value++,
done: false
};
}
})
}
for(let e of o)
console.log(e);
反復器を実装するには、主にnext()メソッドでiteratorオブジェクトを返します.
ジェネレータ関数の反復
ジェネレータ関数はyieldを使用して、次回関数に入るときのエントリの位置を制御できます.
function* foo(){
yield 0;
yield 1;
yield 2;
yield 3;
}
for(let e of foo())
console.log(e);
上の過程では、4回の過程で、0から4まで、yieldが飛び出すたびに、次は飛び出す位置から実行し続けます!
非同期ジェネレータ関数反復{{ひどうきジェネレータかんすう:はんぷく}}
function sleep(duration) {
return new Promise(function(resolve, reject) {
setTimeout(resolve,duration);
})
}
async function* foo(){
i = 0;
while(true) {
await sleep(1000);
yield i++;
}
}
for await(let e of foo())
console.log(e);