mozilla
Your Search Results

    for...in

    for..inステートメントは、指定したオブジェクトのプロパティに対して、順不同で反復処理をします。指定された文が各プロパティに対して実行されます。

    構文

    for (variable in object) {
    ...
    }
    variable
    variableには、反復するごとに異なるプロパティ名が設定されます。
    object
    このオブジェクトのプロパティに対して反復処理がされます。
    statement
    各プロパティに対して実行する文。ループ内で複数の文を実行するには、それらの文をグループ化するためにブロック文 ({ ... }) を使ってください。

    説明

    for...in ループは組み込みプロパティに対しては反復しません。これらには、StringindexOf メソッドや ObjecttoString メソッドといった、オブジェクトの全組み込みメソッドも含まれます。しかしながら、このループは (組み込みプロパティを上書きしたものも含む) すべてのユーザ定義プロパティに対して反復します。

    for...in ループは、任意の順序でオブジェクトのプロパティに対して反復します。もしプロパティがある反復で修正された後に訪問されたなら、ループにより公開される値は後の時点での値となります。訪問される前に削除されたプロパティは、それから後には訪問されません。オブジェクトに対する反復が起きている中でそのオブジェクトに追加されたプロパティは、訪問されるかもしれませんし反復から省略されるかもしれません。一般的に、現在訪問しているプロパティ以外のものに関しては、反復の間はオブジェクトにプロパティを追加、修正、または削除しないのが一番です。追加したプロパティが訪問されるか、修正したプロパティが修正される前または後に訪問されるか、または削除したプロパティが削除される前に訪問されるかといったことには、何の保証もありません。

    Array に対して反復する方法としてこれを使うのは魅力的かもしれませんが、そのことは悪い考えです。for...in 文は配列の要素に加えてユーザ定義プロパティに対しても反復するので、もし配列の非整数、または非正数のプロパティを (たとえば、"foo" プロパティを配列に追加することにより、または Array.prototype にメソッドかプロパティを追加することによってさえ) 修正していたなら、for...in 文は数値的な添え字に加えてユーザ定義プロパティの名前も返します。また、反復の順序は任意なので、配列に対しての反復は数値順に要素を訪問しないかもしれません。よって、配列に対して反復するときは、数値的な添え字を用いた伝統的な for ループを使うほうがよいのです。

    例: for...in を使う

    次の関数は、オブジェクトとそのオブジェクトの名前を引数として取ります。そして、そのオブジェクトの全プロパティに対して反復し、プロパティ名とその値を一覧にした文字列を返します。

    function show_props(obj, objName) {
       var result = "";
       for (var i in obj) {
          result += objName + "." + i + " = " + obj[i] + "\n";
       }
       return result;
    }
    

    関連情報

    • for each...in - for...in に似ていますが、プロパティ名そのものではなく、オブジェクトのプロパティの値に対して反復します。(New in JavaScript 1.6。)
    • for

    ドキュメントのタグと貢献者

    タグ: 
    Contributors to this page: taiyaki32, Mgjbot, ethertank, Nanto vi, teoli, Potappo
    最終更新者: teoli,
    サイドバーを隠す