次のコードの最後で がb
等しくないのはなぜですか?null
var a = { property: "value" },
b = a;
console.log(a === b); // true
a = null;
console.log(b); // Object { property: "value" }
a
とb
は 1 つのオブジェクトに関連付けられた 2 つの参照であるため、両方とも になると思いましたnull
。
次のコードの最後で がb
等しくないのはなぜですか?null
var a = { property: "value" },
b = a;
console.log(a === b); // true
a = null;
console.log(b); // Object { property: "value" }
a
とb
は 1 つのオブジェクトに関連付けられた 2 つの参照であるため、両方とも になると思いましたnull
。
行で:
a = 5;
'a' は、値 5 の整数を含む新しいメモリ ブロックを指しており、最初に作成したオブジェクトへの以前の参照を上書きしています。代わりにこれを試してください:
var a = { property: "value" },
b = a;
console.log(a === b); // true
a.property = 5;
console.log(b); // Object {property: 5}
このように上書きするのではなく、キーが指すa
メモリのブロックを value の文字列から valueの整数に変更します。property
"value"
5
これa
により、最初に作成したオブジェクトを含むメモリ ブロックへの の参照が保持されます。次の行で 'b' を指すように設定します。
編集:上記は、以前の質問に答えるものでした。null に設定a
すると、元のオブジェクトへの参照が削除されるだけです。b
何か (この場合) がまだオブジェクトへの参照を持っている間、オブジェクトはガベージ コレクションされません。を作成した後b
、参照は独立していますが、どちらもたまたま同じメモリ ブロックを指しています。