2012-04-03 8 views
2

「どのオブジェクトが既に処理されたか」を何らかのセットにプッシュすることで注意したいと思います。
はJavaScriptで設定されていないタイプが存在しないのでMimicking sets in JavaScript?
で述べたように、私は、つもり使用目的だそこで質問です:この辞書チェックはすでに私のSetオブジェクトに押し込まれたオブジェクトのAMOUTに依存していますか?それはO(N)かO(1)ですか?オブジェクトの速度[プロパティ]

+0

jsperf.comがこれを見つける場所です。 – tkone

+0

ブラウザとデバイスの速度の違いを測定するには、[jsPerfテストケースを作成する](http://jsperf.com/)があります。 –

答えて

1

答えはJSエンジンではっきりと異なります。 V8に関しては、チェック速度はオブジェクトの量(== "Set"オブジェクトのプロパティ数)に依存しますが、依然としてO(1)です。さもなければ、かなりのWebアプリケーションが十分に速く動作することはありません。

可能であれば、if ("foo" in A)を使用して要素の存在をチェックしないでください。これはプロトタイプチェーン全体をトラバースするため、パフォーマンスに影響を与えます。多くの場合、そこにいる(toStringのように)。可能であれば、A.hasOwnProperty("foo")を使用してください。

+2

あなたが参照している問題については、可能であれば、要素存在をチェックするために 'if(" foo "in A)'を使わないでください。これはプロトタイプチェーン全体を横断するので、パフォーマンスに影響を与えます。すべきではないたくさんのオブジェクト( 'toString'など)。可能であれば、 '.hasOwnProperty(" foo ")'を使用してください。 –

+0

あなたはあなたのコメントを答えにプッシュすることができます)人々は最初の部分よりも便利であるように見えます。 – Nakilon

+0

@Nakilon:done、thanks –