javascriptのfor..inステートメントとforeach..inステートメントの違いは何ですか?私が知らない微妙な違いはありますか、それとも同じで、ブラウザごとに異なる名前が付いていますか?
4 に答える
「foreach...in」は、指定されたオブジェクトのプロパティのすべての値に対して指定された変数を繰り返します。
例:
var sum = 0;
var obj = {prop1: 5, prop2: 13, prop3: 8};
for each (var item in obj) {
sum += item;
}
print(sum); // prints "26", which is 5+13+8
「for...in」は、オブジェクトのすべてのプロパティに対して指定された変数を任意の順序で繰り返します。
例:
function show_props(obj, objName) {
var result = "";
for (var i in obj) {
result += objName + "." + i + " = " + obj[i] + "\n";
}
return result;
}
2013年3月3日、for each... in
ループは非推奨になりました。MDNが推奨する「新しい」構文はfor... of
です。
このデモンストレーションは、うまくいけば違いを説明するはずです。
var myObj = {
a : 'A',
b : 'B',
c : 'C'
};
for each (x in myObj) {
alert(x); // "A", "B", "C"
}
for (x in myObj) {
alert(x); // "a", "b", "c"
alert(myObj[x]); // "A", "B", "C"
}
優れたMDCドキュメントをお読みください。
1つ目は、コレクションを通常ループし、オブジェクトのプロパティを任意にループするためのものです。
for ... inループは、組み込みプロパティを反復処理しません。これらには、StringのindexOfメソッドやObjectのtoStringメソッドなど、オブジェクトのすべての組み込みメソッドが含まれます。ただし、ループはすべてのユーザー定義プロパティ(組み込みプロパティを上書きするプロパティを含む)を繰り返し処理します。
for ... inループは、オブジェクトのプロパティを任意の順序で繰り返します。プロパティが1回の反復で変更され、後でアクセスされた場合、ループによって公開される値は、その時点での値になります。訪問される前に削除されたプロパティは、後で訪問されることはありません。反復が発生しているオブジェクトに追加されたプロパティは、訪問されるか、反復から省略されます。一般に、現在アクセスしているプロパティ以外のプロパティを反復中にオブジェクトに追加、変更、または削除しないことをお勧めします。追加されたプロパティが訪問されるかどうか、変更されたプロパティが変更される前または後に訪問されるかどうか、または削除されたプロパティが削除される前に訪問されるかどうかの保証はありません。
後者を使用すると、オブジェクトのプロパティをループできます。
オブジェクトのプロパティのすべての値に対して指定された変数を繰り返します。個別のプロパティごとに、指定されたステートメントが実行されます。
他の回答に加えて、これfor each...in
はECMA標準の一部ではなく、次のエディション3.1にも含まれていないことに注意してください。これは、MozillaFoundationによるECMAScript3の拡張であるJavaScript1.6で導入されました。
リンクされたウィキペディアのページによると、Firefox1.5以降とSafari3.x(+?)でのみ実装されています。