1. ホーム
  2. javascript

[解決済み] immutableとはどういう意味ですか?

2022-10-02 13:30:48

質問

文字列が不変であるということは、つまり (JavaScriptを想定してみます)

var str = 'foo';

alert(str.substr(1)); // oo

alert(str); // foo

文字列に対してメソッドを呼び出すと、変更後の文字列は返されますが、初期文字列は変更されないということでしょうか?

文字列がmutableであった場合、2番目の alert() が返されるということでしょうか。 oo も返すのでしょうか?

どのように解決するのですか?

オブジェクトを一度インスタンス化すると、そのプロパティを変更することはできない、ということです。 最初の警告では、foo を変更していません。 新しい文字列を作成しているのです。 このため、2つ目のアラートでは oo の代わりに "foo" と表示されます。

文字列に対してメソッドを呼び出すと を呼び出すと、変更した文字列を返しますが 文字列は変更されませんが を変更しないということでしょうか?

はい、そうです。 一度作成された文字列は何も変更することができません。 さて、これは新しい文字列オブジェクトを割り当てられないという意味ではありません。 str 変数に新しい文字列オブジェクトを代入できないということではありません。 strが参照している現在のオブジェクトを変更することができないだけです。

もし文字列が変更可能であった場合 2番目のalert()はooを返すということでしょうか? を返すということでしょうか?

技術的には、substringメソッドは新しい文字列を返すので、そうではありません。 オブジェクトをミュータブルにしても、メソッドは変わりません。 mutableにするということは、技術的には、substringが新しいものを作成する代わりに、元の文字列を変更するようにすることができることを意味します。