1. ホーム
  2. javascript

[解決済み] なぜjavascriptで定数オブジェクトを変更できるのですか?

2022-04-22 08:51:11

質問

ES6がまだ標準化されていないのは知っていますが 現在、多くのブラウザが const というキーワードをJSで使用します。

specでは、こう書かれています。

定数の値は、再割り当てによって変更することはできません。 定数を再宣言することはできません。このため 定数を初期化せずに宣言することは可能ですが、それは無駄なことです。 は無駄です。

というようなことをすると

const xxx = 6;
xxx = 999;
xxx++;
const yyy = [];
yyy = 'string';
yyy = [15, 'a'];

すべてOKなんですね xxx はまだ 6yyy[] .

しかし、もし私が yyy.push(6); yyy.push(1); 定数配列が変更されました。今現在は [6, 1] で変更することはできません。 yyy = 1; .

これはバグでしょうか、それとも何か見逃しているのでしょうか?最新のクロームとFF29で試してみました

解決方法を教えてください。

ドキュメントに記載されています。

...定数は、再割り当てによって変更することはできません

...定数の再宣言はできない

配列やオブジェクトに追加する場合、定数を再割り当てしたり再宣言したりするのではなく、すでに宣言され割り当てられている、定数が指すリストに対して追加しているだけです。

だから、これはうまくいくんだ。

const x = {};

x.foo = 'bar';

console.log(x); // {foo : 'bar'}

x.foo = 'bar2';

console.log(x); // {foo : 'bar2'}  

とこれを

const y = [];

y.push('foo');

console.log(y); // ['foo']

y.unshift("foo2");

console.log(y); // ['foo2', 'foo']

y.pop();

console.log(y); // ['foo2']

が、そのどちらでもない。

const x = {};
x = {foo: 'bar'}; // error - re-assigning

const y = ['foo'];
const y = ['bar']; // error - re-declaring

const foo = 'bar'; 
foo = 'bar2';       // error - can not re-assign
var foo = 'bar3';   // error - already declared
function foo() {};  // error - already declared