ECMAScript 5のarray.forEach(callback[, thisArg])
は、配列を反復処理するのに非常に便利であり、forを使用した構文よりも多くの利点があります。
for(var key in object)
を置き換えるobject.forEach
がない理由はありますか?
もちろん、_。eachや$ .eachなどのJavaScript実装を使用することもできますが、これらはパフォーマンスを低下させるものです。
まあ、それはあなた自身を装備することはかなり簡単です。プロトタイプをさらに汚染するのはなぜですか?
_Object.keys(obj).forEach(function(key) {
var value = obj[key];
});
_
大きな理由は、組み込みプロパティをObject
に追加することを避けたいと思うからです。 Object
sは、Javascriptのすべての構成要素ですが、言語の一般的なキー/値ストアでもあります。 Object
に新しいプロパティを追加すると、Javascriptプログラムが使用する可能性のあるプロパティ名と競合します。そのため、Object
に組み込みの名前を追加する際には細心の注意を払っています。
配列は整数でインデックス付けされるため、この問題はありません。
これは、単に_obj.keys
_の代わりにObject.keys(obj)
がある理由でもあります。 Object
コンストラクターを汚染します。通常は大した問題ではないが、インスタンスはそのままにします。
_.forEach
_ does繰り返しのためだけに変数を作成します...作成したものではなく、自分で作成してください。
shimを使用している場合、それらはクロージャー内のJS変数です。それ以外の場合は、C++など、またはブラウザーのネイティブ実装である可能性があります。
ES6は、_for ... of
_を取得しています。これは、渡されたものを繰り返し処理します。
ES6は、let
の代わりにvar
を使用して、(関数スコープではなく)ブロックレベルの変数も取得しています
ES6の特定の種類のオブジェクト(つまり、イテレーターをサポートするために構築するオブジェクト)にイテレーターを追加できます。
ただし、ここでの問題は、ES5がES3の構文のほとんどを保持することを意図していたことです(新しいキーワードはほとんどなく、通常の使用では新しいキーワードはありません)。
追加機能のほとんどはメソッド呼び出しでなければなりませんでした(通常はプロトタイプ)。
。
オブジェクトに.map()
/.reduce()
能力は必要ありませんが、非常に特定のオブジェクトを構築する場合を除き、その場合は自分で実装します。
JavaScriptのすべてのオブジェクトはObject
を継承することを覚えておく必要があります。 javascriptのすべてのオブジェクトがプロパティを繰り返す必要はありません。それらは、主にデータモデルオブジェクトに限定されます。 forEachメソッドを追加すると、every objectのプロトタイプが不必要にまとめられるだけです。
現在オブジェクトとそのメソッドが表示されている場合、それらはオブジェクトを識別するため、またはあるオブジェクトと別のオブジェクトを区別するためにのみ存在します。