Почему объекту не присваивается null?
const a = {};
function clear(obj) {
obj.x = 40;
obj = null
}
clear (a);
console.log(a)
Почему в консоль выводится {x: 40}, а не null?
Ответы (3 шт):
потому что obj константа глобальной области видимости,- изменение контанты не вызывает ошибок но переназанчение вызывает. то есть obj это константа, ссылающаяся на изменяемый объект. Сам объект может быть изменён
obj.y=555;
delete obj.y;
но сама константа изменена быть не может
const obj={};
obj=2; #нет ошибок и нет присваивания
var obj=3; #ошибка
obj - это локальная переменная функции clear. Фактически это ссылка на объект a в вашем случае. Поэтому когда вы меняете свойства объекта obj, то меняются свойства объекта a. Но когда вы меняете саму локальную переменную obj, то она просто теряет связь с объектом a и начинает указывать уже на что-то другое, но на объект a это никак не влияет.
const a = {};
function clear(obj) {
obj.x = 40;
obj = null;
console.log(obj)
}
clear (a);
console.log(a);
console.log(a.__proto__= null);
const a = {};
function clear(obj) {
obj = null;
obj.x = 40;
}
clear (a);
Если имеется ввиду может ли объект в javascript быть null, то по-моему нет. В JavaScript null не является «ссылкой на несуществующий объект» или «нулевым указателем», как в некоторых других языках. Только cвойство proto — исторически обусловленный геттер/сеттер для скрытого свойства [[Prototype]] объекта может быть null. Подтверждение моих слов - второй код. А если вопрос проще, то в первой строке фунции clear obj = a, а во второй строке obj переприсвается значение null, что и показывает console.log(obj) .