[解決済み] なぜ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
はまだ
6
と
yyy
は
[]
.
しかし、もし私が
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
関連
-
[解決済み】React - uncaught TypeError: 未定義のプロパティ 'setState' を読み取れない
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] JavaScriptのオブジェクトが空であることをテストするにはどうすればよいですか?
-
[解決済み] JavaScriptのオブジェクトにキーが存在するかどうかをチェックする?
-
[解決済み] JavaScriptで要素のクラスを変更するにはどうすればよいですか?
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
JavaScriptにおけるマクロタスクとミクロタスクの詳細
-
元のイベントが実行されなかった後に要素を追加するためのjQueryソリューション
-
vueディレクティブv-bindの使用と注意点
-
[解決済み] テスト
-
[解決済み】ローカルファイルを開くことができません - Chrome: ローカルリソースの読み込みが許可されていない
-
[解決済み】React - TypeError: 未定義のプロパティ 'props' を読み取ることができない。
-
[解決済み】JavaScriptエラー(Uncaught SyntaxError: Unexpected end of input)
-
[解決済み】React-Redux: アクションはプレーンオブジェクトでなければならない。非同期アクションにはカスタムミドルウェアを使用する
-
[解決済み】 Uncaught TypeError : undefined のプロパティ 'replace' を読み取れない In Grid
-
JSクリックイベント - Uncaught TypeError: プロパティ 'onclick' に null を設定できません。