JavaScript の文字列プリミティブと文字列オブジェクトの違いは何ですか?
JavaScript では、プリミティブとオブジェクトは 2 つの異なるデータ型です。文字列リテラル (例: "hello") および new キーワードなしの String 呼び出しから返される文字列は、プリミティブ文字列です。ただし、JavaScript はプリミティブを String オブジェクトにシームレスに変換し、プリミティブ文字列の String オブジェクト メソッドにアクセスできるようにします。
オートボクシング: 重要な洞察
当然のことながら、次のように考える人もいるでしょう。プリミティブ文字列に対する操作 (メソッド呼び出し) は、追加の変換ステップにより String オブジェクトに対するものよりも遅くなります。しかし、ベンチマーク テストでは、速度の点でプリミティブ文字列が String オブジェクトよりも優れているという逆の結果が明らかになりました。
この直感に反する動作は、自動ボクシング によって説明できます。 String オブジェクトを必要とする操作でプリミティブ文字列が使用される場合、JavaScript はプリミティブを String オブジェクトで自動的にラップし、ラップされたオブジェクトで必要なメソッドを呼び出します。
例の確認
次のコード ブロックについて考えてみましょう。
// Code block-1: Primitive var s = '0123456789'; for (var i = 0; i < s.length; i++) { s.charAt(i); } // Code block-2: String object var s = new String('0123456789'); for (var i = 0; i < s.length; i++) { s.charAt(i); }
コード ブロック 1 では、s はプリミティブ文字列ですが、コード ブロック 2 では、s は String オブジェクトです。パフォーマンス テストでは、使用するブラウザに関係なく、コード ブロック 1 がコード ブロック 2 よりも一貫してパフォーマンスが優れていることが示されています。
パフォーマンスの違いはなぜですか?
プリミティブ文字列のパフォーマンス上の利点より単純なデータ構造に由来します。 String オブジェクトとは異なり、プリミティブ文字列は生のメモリの場所へのポインタであるため、より高速なランダム アクセスが可能になります。
JavaScript がプリミティブ文字列を String オブジェクトに自動的にラップする (オートボックス化) と、次の理由によりパフォーマンスが若干低下します。オブジェクト作成のオーバーヘッド。ただし、オートボックス化は変数のプリミティブな性質を変更せずに必要なメソッドのみを適用するため、オートボックス化された文字列に対する後続のメソッド呼び出しは String オブジェクトを直接使用するよりも高速です。
以上がJavaScript のプリミティブ文字列が文字列オブジェクトより速いのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。