javascriptのfor..inとfor each..inの違いは何ですか?
-
10-07-2019 - |
質問
javascriptのfor..inとfor each..inステートメントの違いは何ですか? 私が知らない微妙な違いはありますか?
解決
" for each ... 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;
}
注03.2013、 for each ... in
ループは非推奨。 MDNが推奨する「新しい」構文は < code> 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ドキュメントを読む。
最初は通常のものですコレクションをループし、オブジェクトのプロパティを任意にループします。
for ... inループは、組み込みプロパティを反復処理しません。これらには、StringのindexOfメソッドやObjectのtoStringメソッドなど、オブジェクトのすべての組み込みメソッドが含まれます。ただし、ループはすべてのユーザー定義プロパティ(組み込みプロパティを上書きするものを含む)を反復処理します。
for ... inループは、オブジェクトのプロパティを任意の順序で繰り返します。プロパティが1回の反復で変更され、後でアクセスされた場合、ループによって公開される値は、その時点での値になります。アクセスされる前に削除されたプロパティは、後でアクセスされません。反復が発生しているオブジェクトに追加されたプロパティは、訪問するか、反復から除外することができます。一般的に、反復中は、現在アクセスしているプロパティ以外のオブジェクトのプロパティを追加、変更、または削除しないことをお勧めします。追加されたプロパティにアクセスするかどうか、変更されたプロパティが変更される前または後にアクセスされるか、削除されたプロパティが削除される前にアクセスされるかは保証されません。
後者を使用すると、ループを繰り返すことができますオブジェクトのプロパティ。
オブジェクトのプロパティのすべての値に対して指定された変数を繰り返します。個別のプロパティごとに、指定されたステートメントが実行されます。
他の回答に加えて、 for each ... in
はECMA標準の一部ではなく、次のエディション3.1 。これは、Mozilla Foundationによる ECMAScript3の拡張であるJavaScript 1.6で導入されました。
リンクされたウィキペディアのページによると、Firefox 1.5+およびSafari 3.x(+?)でのみ実装されています。