私の質問は簡単ですConst
についてです。私はたくさんの場所を見てきましたが、開発者はconst
よりもlet
とvar
を好んでいましたが、オブジェクトもそのプロパティが変更可能であると宣言しました。誰かがこれを説明できますか?Constはなぜオブジェクト宣言で頻繁に使用されますが、そのプロパティは変更できますか?
const a = {};
a.name = "";
console.log(a.name);
私の質問は簡単ですConst
についてです。私はたくさんの場所を見てきましたが、開発者はconst
よりもlet
とvar
を好んでいましたが、オブジェクトもそのプロパティが変更可能であると宣言しました。誰かがこれを説明できますか?Constはなぜオブジェクト宣言で頻繁に使用されますが、そのプロパティは変更できますか?
const a = {};
a.name = "";
console.log(a.name);
それは(あなたの例では)a
異なる基準を割り当てられることを防止するが、それらは、オブジェクトインスタンスの現在の状態を伝えるように、オブジェクト内の特性はしばしば変更される必要があります。
単純な類推ですが、ここでより正確ですか?
var me = "Scott";
const me = "Scott";
この場合はどうなりますか?
me = you;
本当に欲しいのであれば、実際の生活では名前を変更することができます。この場合、me
はいつもそして永遠に参照すべきです、まあ、私 - 「Scott」だからconst
がより良い宣言です。
しかし、私の生涯にわたって、私の特徴は変わり、いくつかは私のコントロールから外れ、いくつかは私のコントロール下にあります。だから、私たちはme
は、基準が変更されることができるはずないという物体の側面、別のオブジェクトを参照するように変更するme
参照したくないながら:あなたはに一定の値を必要に応じて、
const me = {};
me.height = "6' 1"; // Used to be 6' 3" back in the day!
しかし、オブジェクトを保持するためには、コンストラクタ関数内のプライベート変数を宣言してそのことを行うことができます。
function Me(height){
// Some aspects of this object will never change. They can be set up
// as private data:
const bloodType = "B+";
// Others are just properties:
this.height = height;
}
オブジェクトリテラルを引き続き使用できますが、読み取り専用になるように特定のプロパティを「ロックダウン」する必要があります。これはObject.defineProperty
で行われます。
オブジェクト自体が上書きされたり、型が変更されたりしないようにするだけです。定数は常にオブジェクトになります。
const a = {};
a = 'foo';
const b = {};
b = { foo: 'bar' };
両方がスローされます:
Uncaught TypeError: Assignment to constant variable.
const
宣言MDN
の値に読み取り専用の参照を作成よれ。 ではありません。は保持している値が不変であり、変数識別子を再割り当てできないことを意味します。例えば、コンテンツがオブジェクトである場合、これは、オブジェクトのコンテンツ(例えば、そのパラメータ)が変更可能であることを意味する。
'const'は不変な参照を作成するので、他の値を代入することはできません。 'let'は共通参照を作成しますが、スコープにバインドされています(関数外では使用できません)。 –
'const a = {};'は単に 'a'が常に同じオブジェクトになることを意味します。 – Xufox