私は何年もJavaScriptを使用してきましたが、これは私を困惑させています。私は物事を理解できるようにvar
を定義する際に、2つのうちの1つが発生します:式は原始的であるJavaScriptのプリミティブとオブジェクトの参照
- 場合、
var
は、渡された式を参照せずにそのプリミティブの新しいインスタンスとして定義されています。 - 式がオブジェクトリテラルの場合、新しいオブジェクトが作成されます。
- 表現が既存のオブジェクトである場合、
var
はオブジェクトを参照し、オブジェクトに対する将来の変更は反映されます。ref
がobj
のbody
プロパティとして定義されているので、私も文字列としてref
をだろうと思っ再定義var obj = {body: {'a': 1, 'b': 2, 'c': 3}}; var ref = obj.body; ref = JSON.stringify(ref); console.log(typeof ref); // string console.log(typeof obj.body); // object
:しかし、私はケース3が適用されないような状況に遭遇しました
影響を受けるのはobj.body
です。それで私は何が欠けているのですか?
あなたは変数を上書きしますが、オブジェクトにあるものを変更するつもりはありません.... – epascarello
「ref = ...」が指しているオブジェクトを変更しないという混乱が生じると思います。 'ref'を変更した場合(例えば、' ref.a = 5'を設定することによって)、両方の参照を介して更新が表示されます。 – Phylogenesis