ホームページ  >  記事  >  ウェブフロントエンド  >  javascript_javascript スキルの文字列連結の詳細な説明

javascript_javascript スキルの文字列連結の詳細な説明

WBOY
WBOYオリジナル
2016-05-16 16:35:121163ブラウズ

最近、「JavaScript Advanced Programming」を勉強しているときに、文字列の特性についての説明がありました。原文はおおよそ次のとおりです。 ECMAScript の文字列は不変です。つまり、文字列が一度作成されると、その値は変わりません。は変更できません。変数に格納されている文字列を変更するには、まず元の文字列を破棄し、次に新しい値を含む別の文字列を変数に入力します。例:

コードをコピーします コードは次のとおりです:

var lang = "Java";
lang = lang "スクリプト";

この操作を実装するプロセスは次のとおりです。最初に 10 文字を保持できる新しい文字列を作成し、次にこの文字列に「Java」と「Script」を入力します。最後のステップでは、元の文字列「Java」を破棄します。と「Script」。これら 2 つの文字列はもう役に立たないためです。ただし、以前のバージョンのブラウザ (IE6 など) では、文字列の連結速度が非常にパフォーマンスを消費するプロセスになります。

これは Java を思い出させます。Java の文字列メカニズムは js に似ています (つまり、一度作成すると変更できず、変更したい場合にのみ元の値を破棄できます)。問題は、js に同様のメソッドがないことです。しかし、このバッファリングメカニズムをシミュレートすることはできます。原則として、結合には配列を使用します。ソースコードは次のとおりです。

コードをコピーします コードは次のとおりです:
function StringBuffer() {
This.__strings__ = new Array();
}
StringBuffer.prototype.append = function (str) {
This.__strings__.push(str);
これを返す // 便利なチェーン操作
}
StringBuffer.prototype.toString = function () {
this.__strings__.join("");
を返します。 }
/*テスト*/

varbuffer = new StringBuffer();
buffer.append("Hello ").append("javascript");

var result =buffer.toString();

アラート(結果);

ps: 要点のアドレスは次のとおりです: https://gist.github.com/hehongwei44/fe71f10e4d2d9295aeab

メカニズムをシミュレートしましたが、このメソッドのパフォーマンスは文字列のスプライシングとどのくらい異なりますか? テスト コードは次のとおりです。

コードをコピーします コードは次のとおりです: var d1 = 新しい日付();
var str = "";
for(var i = 0; i str = "テキスト ";
}
var d2 = 新しい日付();
document.write("テスト 1 のコスト: " (d2.getTime() - d1.getTime())/1000 "秒" "
");

var oBuffer = new StringBuffer();
d3 = 新しい日付(); for(var i = 0; i oBuffer.append("text ");
}
var sResult = oBuffer.toString();
d4 = 新しい日付();
document.write("テスト 2 のコスト: " (d4.getTime() - d3.getTime())/1000 "秒");



テスト結果は次のとおりです (テスト結果は環境によって異なる場合があります):
1. 1000 回の比較に基づくと、2 つの実行は非常に高速 (基本的には数ミリ秒) であり、後者と前者の時間の違いは 10 ミリ秒を超えません。

2. 10,000 回を基準とした実行結果は上記と同様ですが、IE6 では前者の方が通話料金が高くなります。

3. 100,000 回を基準にすると、IE6 では文字列のスプライシングに明らかに時間がかかります。他のブラウザでは大きな違いはなく、一部のブラウザは StringBuffer よりも時間がかかります。


結論

1. スプライスされた単語の数が 1,000 回未満の場合は、大胆に前者を使用します。一般に、スプライスされた単語の数が数千になる状況に遭遇することはほとんどありません。

2. 他のブラウザ (主に IE6) では、スプライシングの数が数万または数十万の場合、IE6 のみで StringBuffer シミュレーションを使用することをお勧めします。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。