MDNから取得
文字列リテラル (二重引用符または単一引用符で示される) と、コンストラクター以外のコンテキスト (つまり、new キーワードを使用しない) での String 呼び出しから返される文字列は、プリミティブ文字列です。JavaScript はプリミティブを String オブジェクトに自動的に変換するため、String オブジェクト メソッドをプリミティブ文字列に使用できます。メソッドがプリミティブ文字列で呼び出されるコンテキスト、またはプロパティ ルックアップが発生するコンテキストでは、JavaScript は自動的に文字列プリミティブをラップし、メソッドを呼び出すか、プロパティ ルックアップを実行します。
したがって、文字列プリミティブに対する操作 (メソッド呼び出し) は、文字列オブジェクトに対する操作よりも (論理的に) 遅くなるはずだと考えmethod
ました。
しかし、このテストケースでは、結果は反対です。コード block-1はコード block-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);
}
結果はブラウザーによって異なりますが、コード block-1は常に高速です。コード block-1がコード block-2よりも高速である理由を、誰でも説明できますか。