文字列リテラル(二重引用符または単一引用符で示される)およびコンストラクター以外のコンテキスト(つまり、新しいキーワードを使用しない)でのString呼び出しから返される文字列は、プリミティブ文字列です。JavaScriptはプリミティブを自動的にStringオブジェクトに変換するため、プリミティブ文字列にStringオブジェクトのメソッドを使用できます。メソッドがプリミティブ文字列で呼び出されるか、プロパティルックアップが発生するコンテキストでは、JavaScriptは自動的に文字列プリミティブをラップし、メソッドを呼び出すか、プロパティルックアップを実行します。
したがって、文字列プリミティブの前に(論理的に)操作(メソッド呼び出し)は文字列オブジェクトの操作よりも遅くなるはずだと思いました。 method
に適用されるました。
しかし、このテストケースでは、結果は逆になります。コードブロック1よりも速く実行コードブロック-2は、両方のコードブロックを以下に示します。
コードブロック1:
var s = '0123456789';
for (var i = 0; i < s.length; i++) {
s.charAt(i);
}
コードブロック2:
var s = new String('0123456789');
for (var i = 0; i < s.length; i++) {
s.charAt(i);
}
結果はブラウザによって異なりますが、コードブロック1の方が常に高速です。誰もがこれを説明してくださいすることができ、なぜコードブロック-1は、より高速であるコードブロック-2 。
'0123456789'.charAt(i)
ですか?
code block-1
速いのですか?
new String
すると、オブジェクトラッピングの別の透明レイヤーが導入されます。typeof new String(); //"object"