2011-08-03 11 views
1

ほとんどのブラウザでは、JavaScriptの場合、文字列を配列のように扱い、文字列を読み取ることができます。しかし、私が試したすべてのブラウザ(IE9、Chrome、Firefox)では、配列のように書くことはできません。配列としてのJavaScript文字列:読み込み中ですが書き込みなし

For example

var string = 'hello world'; 
alert(string[0]);//alerts 'h' 
alert(string);//alerts 'hello world' 

string[0]='j'; 
alert(string[0]);//alerts 'h' 
alert(string);//alerts 'hello world' 

これは単なるJavaScriptの開発者のためのより多くの影響があります。

jelloPeople.roam(); 


を誰もが、この背後にある理由を知っていますか?例えば


、私はMozilla's documentationを見てきました、そして、彼らはそれをほのめかすが、説明を与えていない:

       」インデックスを経由して文字を設定すること..tryingありませんエラーはスローされますが、文字列自体は変更されません。

ボトムライン:いくつかの配列プロパティが文字列に与えられ、他のものは与えられないということは、私には奇妙で混乱しています。

UPDATE:

オクラホマので、JavaScriptの文字列は不変オブジェクトですが、なぜですか?上記のような操作が不変でない場合(11文字の新しい文字列を作るのではなく、1文字を変更する場合)は速くなるようです。実際には、文字列関数の場合、不変でないとパフォーマンスに悪影響を与えるケースはありませんが、パフォーマンスが改善される箇所がいくつか見られます。また、JavaScriptに真のマルチスレッドは存在しないため、そこには不変型のメリットはありません。

(削除され、これを調査し、おそらく新しいquesionに聞いてきます)


*未IE 6または7

+0

'jelloPeople.roam()'?どういう意味ですか? –

+1

文字列は不変です。 –

+1

[immutability](http://en.wikipedia.org/wiki/Immutable_object) - よく知るべきことについて読む。 –

答えて

4

このJavaScriptの文字列は、設計によってimmutableあるというだけの理由。一度作成されると変更することはできません。

4

JavaScriptの文字列が不変である可能性があります。すべての文字列関数は実際に文字列自体を変更するのではなく、新しい文字列関数を返すことに注意してください。これは文字を直接変更する場合と同じですが、不変のモデルでは機能しません。

関連する問題