3

書籍ProfessionalJavascriptfor Web Developersで、プリミティブラッパーは、プリミティブオブジェクトのプロパティとメソッドにアクセスしようとするときにJavaScriptによって内部的に使用されることを読みました。これは、文字列プリミティブの長さプロパティにアクセスしようとするたびに、値が再計算されることを意味しますか?私の腸は、文字列が固定されているため、その長さの値はどこかに格納され、ラッパーによってのみアクセスされると言っていますが、私はむしろ確信しています。

4

2 に答える 2

5

仕様により、はい(§11.2.1§8.7.1§9.9§15.5.5)。

それでも、実際の実装がメモリ内に文字列オブジェクトを作成するという意味ではありません。これは確実に最適化されています。

于 2012-10-23T17:48:48.103 に答える
3

これは本当だと思います。次のように、プリミティブ値のプロパティにアクセスしようとすると、プリミティブラッパーがその場で作成されます。

"foo".length; // behaves as new String('foo').length

プロパティにアクセスしようとした瞬間に計算されるだけlengthでなく、まったく新しいオブジェクトも作成されます(そのオブジェクトが実際にプロパティを含むものです)。その後、ラッパーはすぐに破棄されます。

パフォーマンスが気になる場合は、気にしないでください。プリミティブラッパーオブジェクトを使用する必要がある場合はめったになく、そのパフォーマンスは、プリミティブ値を使用する場合よりも桁違いに遅いようです(テストを参照)。通訳に最適化を気にかけてもらいましょう。

于 2012-10-23T17:06:40.583 に答える