7

次の 2 つの例を考えます。

var myNumber = 10; //primitive

var myNumber = new Number(10); //object

型変換が発生したとき、どちらがより速く実行されますか?

var myString = myNumber.toString(); //convert to string

プリミティブがオブジェクトに変換されて式に応答し、その後再びプリミティブに戻るため、オブジェクト型の変換の方が高速であると思います。

4

2 に答える 2

1

優れたコメントを回答に要約します。theSystem、RocketHazmat、pst、bfavaretto、Pointy に感謝します。

どちらがより速く実行されますか? だと思います…</p>

テスト、テスト、テストしかできません。jsPerfはそれを行うための良い選択です。テストでは、空の文字列と連結されたプリミティブ値が最も高速な方法であることが示されています。関数呼び出しはコストがかかります。これは、変数がキャッシュされずに毎回インスタンス化される場合に特に当てはまります ( Geuis によるテスト)。

プリミティブがオブジェクトに変換されて式に応答し、再びプリミティブに戻るため、オブジェクト型の変換が高速になります。

これは、EcmaScript 仕様が動作について説明していること (セクション 8.7.1セクション 9.8 ) にすぎず、現在のエンジンが行うことではありません。オブジェクトのオーバーヘッドは発生しませんが、内部のプリミティブ値のみを使用します。仕様のステップ数を信用しないでください!

ただし、関数を呼び出すのではなく (セクション 15.7.4.2 ) - ネイティブであっても - 演算子を介して直接取得する(セクション 11.6.1 ステップ 7 ) 方が高速です。Number.prototype.toStringToStringaddition

一般に、時期尚早に最適化しようとしないでください。ただし、実際にパフォーマンスの問題が発生した場合にのみ行ってください (このコードではほとんど問題になりません)。したがって、簡単にするためにプリミティブ値を使用し、読みやすいものに応じて、またはどちら.toString()かを使用します。+""

于 2013-01-11T01:08:37.423 に答える
1

型キャストを使用したプリミティブ数は、すべての中で最速です。

http://jsperf.com/num-type-conversion

于 2013-01-11T00:08:46.340 に答える