2017-02-14 10 views
-2

for..in構文を使用してJavaScriptオブジェクトをループするときに、この困惑のエラーが発生しました。JavaScriptの内部で変数が定義されていませんFor-Inループ

{ 
    "12345678" : { 
    ... 
    }, 
    "12345679" : { 
    ... 
    }, 
    "12345680" : { 
    ... 
    } 
} 

多分それは重要、このオブジェクトは応答のビルトイン.val()方法を使用してFirebaseデータベースから取得されています。私はこれに似たダミーデータのセットを持っています。これは通常のjsオブジェクトです。

しかし、オブジェクトをトラバースするとき、の内側にあると宣言された変数は、何らかの形で定義されていません。ループを除くすべてのコードを削除しましたが、エラーが発生します。

私は本当に困惑しています。これはどのように可能ですか?私はfor..inに渡された変数がループ内で常に利用可能(または少なくとも定義済み)であると考えました。

+1

'key'はどこかに定義しましたか? for(データ内のvarキー)と似ていますか?また、 'JSON.stringify(data、null、4)'のようなもので 'data'を印刷しようとしましたか? – mc10

+0

ええ、それはばかげていました。どこでも 'var'宣言しませんでした。私は今30分、これをぶち壊してきた。私はそれが寝る時間だと思う。 – ppajer

答えて

1

、あなたはおそらくkeyを定義する必要があります。それ以外の場合は、(おそらく)グローバル変数を定義します。グローバル変数は正しく動作する場合と動作しない場合があります。また、あなたのループに表示され、無関係な特性を避けるために、hasOwnPropertyを使用します。

for (var key in data) { 
    if (!data.hasOwnProperty(key)) { 
     continue; 
    } 

    console.log(data[key]); 
} 

は詳細についてはHow do I loop through or enumerate a JavaScript object?を参照してください。

+0

「hasOwnProperty」のヒントをありがとう。最初のエラーは見落としでしたが、これは実際に使用する必要があります。 – ppajer

0

for..inステートメントには正しい構文を使用しないでください。 あなたは(あなたがES6を使用している場合やletvarkey変数を定義する必要があります。文の中でそれを使用するために:私のコメントで述べたように

for(var key in data){ 
    console.log(data[key]) 
} 
+0

それは、ありがとう!私はそれがこのようなものを見落とし始めるとき、それは睡眠の時間だと思う。 :) – ppajer

関連する問題