JavaScript の Const オブジェクト: 不変プロパティを理解する
ES6 の constant キーワードにもかかわらず、JavaScript では定数オブジェクトを変更できるようです。これは、特に仕様の不変性の主張を考慮すると、不可解かもしれません。では、何が起こっているのでしょうか?
まず、MDN ドキュメントで明らかにされているように、constant キーワードは定数自体の再割り当てと再宣言を禁止します。ただし、オブジェクトまたは配列を変更するときは、それを再代入したり再宣言したりすることはありません。代わりに、オブジェクトのプロパティまたは配列の要素を操作するだけです。
次の例を考えてみましょう。
const x = {}; x.foo = 'bar'; // Adds a property to an existing object
const y = []; y.push('foo'); // Appends an element to an existing array
どちらの場合も、定数オブジェクト (x) と配列 ( y) 同じ参照のままです。オブジェクト自体を変更するのではなく、その要素を追加または変更します。これは、定数参照の不変性に違反しないため許可されます。
ただし、再割り当てまたは再宣言は依然として禁止されています:
const x = {}; x = {foo: 'bar'}; // Error: Reassigning a constant
const y = ['foo']; const y = ['bar']; // Error: Re-declaring a constant
したがって、できる限り、定数オブジェクトまたは定数配列の要素のプロパティを変更する場合、参照自体を置き換えたり再定義したりすることはできません。
以上がJavaScript で定数オブジェクトを変更できるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。