2

好奇心から、for(var p in object) を介してオブジェクトを反復処理するとき、pa 文字列か何か他のものですか? 私は変数を常に 1 つのステートメントだけで初期化しているので、for ループで使用する前に型が正しいことを確認したいと考えています。

4

2 に答える 2

3

の値がpキーです。オブジェクトのすべてのキーが文字列である場合、p常に文字列になります。マップを反復処理すると、キーはオブジェクトになります。それはすべてあなたのオブジェクトに依存します。しかし、はい、ほとんどの場合、それは文字列になります。(マップを使用している場合は、この質問をする必要はありません。)

プロパティが列挙可能なプロパティであることを確認する古い方法は次のとおりです。

for (var p in myObject) {
    if (myObject.hasOwnProperty(p)) {
        // 'p' is a key for an enumerable property of myObject
    }
}

ES5での新しい方法は、以下を使用していObject.keysます。

Object.keys(myObject).forEach(function(p) {
    // 'p' is a key for an enumerable property of myObject
});

ただし、このコードにはIE9またはレガシーブラウザ用のシムが必要です。簡単に言えばObject.keys(myObject)、オブジェクトのキーの配列を返します(列挙可能なプロパティの場合のみ)。

于 2012-11-12T08:01:51.373 に答える
2

はい、 p in の型for(var p in object)は astringです。

この制御構造を使用すると、オブジェクトが連想配列として扱われます(実際にはどちらも同じです)。各プロパティのキーは に割り当てられpます。

そのようなオブジェクトをループすると、オブジェクトに追加したものだけでなく、プロトタイプチェーンから継承されたすべての列挙可能なプロパティが得られることに注意してください。

次のように、プロパティを追加したものに制限できます。

for(var p in myObject) {
  if(myObject.hasOwnProperty(p)) {
  }
}
于 2012-11-12T07:41:38.833 に答える