Один и тот же объект не всегда один и тот же?

Зачем b не равно null в конце следующего кода?

var a = { property: "value" }, 
    b = a;
console.log(a === b); // true

a = null;
console.log(b); // Object { property: "value" }

я думал так a а также b две ссылки привязаны к одному объекту и, следовательно, оба станут null,

1 ответ

Решение

В соответствии:

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Скорее меняя блок памяти ключом property указывает на строку со значением "value", в целое число со значением 5,

Это сохраняет aСсылка на блок памяти, содержащий объект, который вы изначально создали, на который вы также установите 'b', чтобы указать на следующей строке.

Изменить: выше было ответить на ваш предыдущий вопрос. Если вы установите a к нулю, он просто удаляет ссылку на исходный объект. Объект не будет собирать мусор, пока что-нибудь (b в данном случае) еще есть ссылка на него. После создания bссылки независимы, но обе они указывают на один и тот же блок памяти.

Другие вопросы по тегам