【注意事項】 for...of と for...in の違い

何のために...の?

for...of は ES6 の新しいトラバーサル メソッドで、イテレータ インターフェイスを含むデータ構造 (配列、オブジェクトなど) をトラバースし、各項目の値を返すことができます。

ES3のfor...ofとfor...inの違い

  • for...of はトラバースしてオブジェクトのキー値を取得し、for...in はオブジェクトのキー名を取得します。

  • for... in はオブジェクトのプロトタイプ チェーン全体をトラバースしますが、パフォーマンスが非常に悪く、使用することはお勧めしません。一方、for... of は現在のオブジェクトのみをトラバースし、プロトタイプ チェーンをトラバースしません。

  • 配列トラバーサルの場合、for...in は配列内のすべての列挙可能なプロパティ (プロトタイプ チェーンの列挙可能なプロパティを含む) を返し、for...of は配列の添え字に対応するプロパティ値のみを返します。

概要: for...in ループは、主にオブジェクトのトラバース用であり、配列のトラバース用ではありません; for...of ループは、配列、配列のようなオブジェクト、文字列、セット、マップ、およびジェネレータ オブジェクトのトラバースに使用できます。

for...of の使い方は?

for...of は ES6 の新しいトラバーサル メソッドで、イテレータ インターフェイスを含むデータ構造 (配列、オブジェクト、文字列など) のトラバーサルを可能にし、各項目の値を返します。はエラーを報告します。

1. トラバースするオブジェクトが配列のようなオブジェクトの場合は、Array.from を使用して配列に変換します。

var obj = {
    0:'one',
    1:'two',
    length: 2
};
obj = Array.from(obj);
for(var k of obj){
    console.log(k)
}
  1. 配列のようなオブジェクトでない場合は、オブジェクトに [Symbol.iterator] 属性を追加して、反復子を指すだけです。

var obj = {
    a:1,
    b:2,
    c:3
};
obj[Symbol.iterator] = function(){
var keys = Object.keys(this);
var count = 0;
return {
            next(){
                if(count<keys.length){
                    return {value: obj[keys[count++]],done:false};
                }else{
                    return {value:undefined,done:true};
                }
        }
    }
};

for(var k of obj){
    console.log(k);
}
 
 

チップ:

  • for...of は iterrable の値をトラバースするために使用され、for...in はオブジェクトのキーをトラバースするために使用されます。

  • for...of はオブジェクトのトラバースには使用できません。for...in は反復可能な配列と文字列のトラバースに使用できますが、反復可能なオブジェクトのトラバースには使用しないでください。

おすすめ

転載: blog.csdn.net/qq_42533666/article/details/129078179