JavaScriptのループ


jsループ文
サイクルはいろいろありますが、一般的なサイクル:whileforなどはよく知られています.ここでは珍しい循環方式をいくつか話します.
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オブジェクトを返します.
  • iteratorオブジェクトのdoneがtrueの場合は反復終了
  • を示す.
  • falseの場合は次の反復を待つことを示し、valueは本反復値
  • である.
    ジェネレータ関数の反復
    ジェネレータ関数は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);