2017-10-04 22 views
3

これは愚かな質問かもしれませんが、CONST変数またはLET変数に代入するためのベストプラクティスがあるかどうかを確認したいと考えました。私はCONST変数を宣言した後は再割り当てできないことを理解していますが、オブジェクトをCONST変数に代入することによってオブジェクトの内容を更新することができます。Javascript:const変数にオブジェクトを代入する変数を代入する

これは悪い習慣と考えられますか?そうでない場合は、LET変数を使用しないでください。

+0

' NO .. 'なぜvariable'ためLET使わないのでしょうか?新しいオブジェクトを人に再割り当てしないで、オブジェクトのプロパティを変更します。 – Keith

+0

'const myHome = new House();'は私が住んでいる 'House'オブジェクトです。' myHouse'がconstの場合、私は新しい家に移動するのを止めます。それは、私が「壁」をノックダウンしたり、窓を開けたり、家の中で家具を動かしたりするのを止めるものではありません。 – apsillers

答えて

2

例は悪いことではありませんが、プロパティを変更してもpersonは同じオブジェクトを参照しているため、完全に受け入れられます。プロパティを追加、削除、変更することができ、personは依然としてオブジェクトを参照します。

ES6 constは、値ではなくバインディングを不変にします。

リビルドする必要がない場合は、constを使用してください。それ以外の場合は、letを使用してください。あなたの例では、personを再バインドしていないので、それは有効で正しいです。

たとえば、2番目のオブジェクトperson2があり、のように再バインドしようとすると、タイプエラーが発生します。

あなたがオブジェクトの値が不変にしたい場合は、Object.freeze()ので、同じようにそれを行うことができます: `これは悪い習慣と考えられる

const person = Object.freeze({ 
    name: "John" 
}); 
person.name = "Kim"; 
// quietly fails or throws a type error