ているJavaScriptの文字列を変更でき?を必要としないシステム構築も可"の文字列ビルダー"JavaScript?

StackOverflow https://stackoverflow.com/questions/51185

  •  09-06-2019
  •  | 
  •  

質問

はjavascriptを使用不変または可変文字列?を必要としないシステム構築も可"の文字列ビルダー"?

役に立ちましたか?

解決

彼らは不変です。大きさを変えることはできませんの文字以内の文字列のようなもの var myString = "abbdef"; myString[2] = 'c'.文字列の操作方法など trim, slice 戻り新しい文字列です。

同じように、いつ書において次に掲げる用語は次のと同じ文字列が正確である一に影響しませんのその他の

let a = b = "hello";
a = a + " world";
// b is not affected

しかし、私どの灰はいえると配列の型になります。joinは、より迅速に連結したいと思った試験の方法の文字列結び抄録インターネットには想像もつかな入StringBuilder.私はいくつかの試験の詳これに該当しない場合(すな!).

これからもインターネットには想像もつかないかを考え続けることを追加するメソッドの呼び出しで遅くなる----

function StringBuilder() {
    this._array = [];
    this._index = 0;
}

StringBuilder.prototype.append = function (str) {
    this._array[this._index] = str;
    this._index++;
}

StringBuilder.prototype.toString = function () {
    return this._array.join('');
}

こちらは速性能試験までを実施。全てを大文字列の連結機 "Hello diggity dog" 一万倍に空の文字列が返されます。

私が三種類の試験

  • を使用 Array.pushArray.join
  • 利用の配列インデックスを回避 Array.push, その利用 Array.join
  • 直文字列連結

その作成の試験により抽出し StringBuilderConcat, StringBuilderArrayPushStringBuilderArrayIndex http://jsperf.com/string-concat-without-sringbuilder/5 そこに行ってください、走行試験を行いまでの素敵なサンプルです。注その固定小さなバグなので、データのための試験手拭、更新、テーブルがあり、十分な性能データです。へ http://jsperf.com/string-concat-without-sringbuilder/5 のためのデータを表に示す。

ここでは数(最終更新Ma5rch2018年)またいきましては下記よりご覧ください.電話番号はそれぞれの試験で1000業/秒(高い方が良い)

| Browser          | Index | Push | Concat | SBIndex | SBPush | SBConcat |
---------------------------------------------------------------------------
| Chrome 71.0.3578 | 988   | 1006 | 2902   | 963     | 1008   | 2902     |
| Firefox 65       | 1979  | 1902 | 2197   | 1917    | 1873   | 1953     |
| Edge             | 593   | 373  | 952    | 361     | 415    | 444      |
| Exploder 11      | 655   | 532  | 761    | 537     | 567    | 387      |
| Opera 58.0.3135  | 1135  | 1200 | 4357   | 1137    | 1188   | 4294     | 

成果

  • 今日では、すべての常緑のブラウザを扱う文字列を連結します。 Array.join するだけでなくIE11

  • 全体では、オペラは、最速で4倍の速度としての配列になります。加

  • Firefoxは、 Array.join だから若干ではFFが大幅に遅(3x)にロードしてください

  • クロムは、これまでのものの文字列concatは3倍以上の配列になります。加

  • 作成StringBuilderのように影響を与えない丈夫。

希望は、誰か他の人がこの有

異なるテストケース

年@RoyTinker考える私が試した欠陥のあった新しい事例とならない大きな文字列列と同じ文字列として用いら異なる文字ごとになります。文字列の連結はまだやっています。うされている時には、試験走っています。

であることをみんなうるかということを考え続けて他の試験方法、お気軽に新規追加リンクの異なるテストケースです。

http://jsperf.com/string-concat-without-sringbuilder/7

他のヒント

から サイズの書:

JavaScriptでは、文字列は変更不能なオブジェクトとは 文字を変更することはできませんびその他の操作 文字列が実際に新しい文字列です。文字列が割り当てた 参考になる値です。一般に、オブジェクトを割り当てる 照会、変化であったということができ、オブジェクトを参照する 可視光を全への参照オブジェクトです。で文字列 変更はできませんし、複数の参考文献を 文字列オブジェクトとなる文字列値を変更せずに お知ることで

性能ヒント:

だって連結の大型文字列は、文字列の部分配列を使用し Array.Join() 方法は、全体の文字列になります。このとき多くの高速化のための列数の多い文字列です。

ありません StringBuilder JavaScript.

文字列は不変なので –その変更はできませんので、おことができる、新しい文字列です。

例:

var str= "Immutable value"; // it is immutable

var other= statement.slice(2, 10); // new string

文字列型の値は不変なので、 文字列オブジェクトを使用して作成した文字列コンストラクタが可変であり、オブジェクトを追加できる新しい物件です。

> var str = new String("test")
undefined
> str
[String: 'test']
> str.newProp = "some value"
'some value'
> str
{ [String: 'test'] newProp: 'some value' }

これを追加できる新規物件を変更する事は出来ませんので、既存物件

画面のテストクロームコンソール

その結果、 1.すべてを文字列型(string)の値がプリミティブ型)は変更できません。2.文字列オブジェクトが変更可能なものを文字列型(string)の値がプリミティブ型)では変更できません。

で明らかに簡単に心ような鉱山から MDN):

Immutablesの物体の状態の変更はできませんのオブジェクトが作成されます。

文字列と数字は不変です。

変更できる:

できる変数名に新しい値が以前の値が開催されます。そのために必要なガベージコレクション

var immutableString = "Hello";

//上記のコードは、新しいオブジェクトの文字列値を作成します。

immutableString = immutableString + "World";

//現在の追加"World"の既存の値とする。

このうちひとつのメカニズムの文字列'immutableString'ではありません!代わり:

に追加の"immutableString"との文字列値は、イベントが発生する:

  1. 既存の価値"immutableString"を検索
  2. "世界"が追加され、既存の価値"immutableString"
  3. それに値を割り当てられている新規ブロックメモリ
  4. "immutableString"オブジェクト現在ポイントを新たに作成されたメモリ空間
  5. 以前に作成したメモリ空間が可能となりますのでごみ収集します。

に関するご質問(コメントを灰の対応についてStringBuilderにASP.NET Ajaxの専門家にも同意できないありがとうございます。

キリスト教Wenzという著書 プロASP.NET AJAX (オ)"このアプローチな効果測定可能なメモリ(実際のところ、実装できるように目盛り以下の基準とされている。"

一方ガロet alう著書の中で ASP.NET AJAXでアクショ (ニ)が数の文字列を連結でき、文字列ビルダーが必須のオブジェクトを避ける大きな性能が下がってきます。"

しょうめさせるためのベンチマーキング結果が異なるとブラウザです。しかし、もっていることを確認してください性能を向上でも考える"有"のためのプログラマにとってはコーディングStringBuilders言語のようにC#アプリケーションをJava.

になっ、なかなか良い書見積もりの中での応答となります。

こちらは一定以外から信頼されるブック

文字列は不変で、ECMAScriptう一度作成され、その値は変化します。変更の文字列による変数は、元となる文字列れを破壊すると、変数に満別文字列を含む新しい価値... —プロJavaScriptのためのWebアプリケーションの開発者が、3rd Ed., p.43

現在、回答を引用サイズの書の抜粋は文字列不変性が間違いには"文字列を割り当てを参照せよ。" (おそらくそれは言葉の逆)となっていました。

の"参考値"という誤解を明らかにし、"プロJavaScript"章"をプリミティブおよび参照値:

の原始的な種類が---[は]:未定義の場合はNull,Boolean数と文字列になります。これらの変数と言われるアクセスによる値ですが、操作は、実際に格納された値を変数です。 —プロJavaScriptのためのWebアプリケーションの開発者が、3rd Ed., p.85

ことになるのに対し オブジェ:

ときに操作するオブジェクトは、まだ作業への参照オブジェクトではなく、実際のオブジェクトそのものです。このため、ファッションにおける価値のあるアクセスを参考にした。—プロJavaScriptのためのWebアプリケーションの開発者が、3rd Ed., p.85

JavaScriptの文字列も変更できません。

文字列をJavascriptでは変更不能な

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top