2017-04-10 4 views
0

メモリコピー操作では、次のことが起こりますか?JavaScriptでの文字列の割り当て動作

1: var foo, bar; 
2: foo = 'abc'; 
3: bar = foo; 

はメモリにコピーfooのメモリ表現は、3行目のbarが指しますか?

fooが1 MBのサイズの文字列(この例では6バイトとは異なります)の場合、これは変わりますか?

最後に、この動作はECMAScript仕様で定義されているのか、実装者に任されていますか? JavaScriptで

+0

これはvarの単なる参考値なので、両方とも同じプリミティブを指しています。ですから、IMHOには1つのプリミティブがあり、2つのヴァースには参照があります。私はそれがより良いと言いたい。 – Jai

+0

しかし、文字列には、あなたと矛盾しているような値渡しのセマンティクスがあります。 – Ben

+0

@BenAstonここで、値渡しのセマンティクスを観察していますか? JavaScriptには、数値以外の値に対する「値渡し参照」セマンティクスがあります。「共有で呼び出す」とも呼ばれます。https://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_sharing – Dai

答えて

2

文字列は不変であり、「参照型」(ラJavaやC#)と見なすことができます。

Are JavaScript strings immutable? Do I need a "string builder" in JavaScript?私はECMAScriptの7仕様で簡単に見ていたが、私はシングルを見つけることができません単に「文字列は不変です」と言い、簡潔な権威の参照 - あなたはその仕様の残りの部分から推測する必要があります:

  1. いいえ、文字列の内容:個別の質問についてhttps://www.ecma-international.org/ecma-262/7.0/index.html

    をn代入時にコピーされます。文字列への参照はです。

  2. いいえ、fooが1MBサイズの文字列を指している場合、以前のように参照が渡されます。
  3. 第2段落を参照してください。
関連する問題