Мой вопрос: являются ли значения null и undefined единственными двумя возможными значениями с таким поведением?
По умолчанию да, потому что если свойство не существует в объекте или любом другомиз его прототипов вы получаете значение undefined
.Причина null
и undefined
в том, что вы не можете получить свойства от них.Это единственные вещи, которые ведут себя таким образом, когда вы пытаетесь получить от них свойства.
Однако любой объект может быть сделан , чтобы выдать ошибку, когда вы получите свойство constructor
либо напрямую:
const o = {
get constructor() {
throw new Error("Don't do that!");
}
};
console.log(o.constructor);
или использование прокси, где ловушка предотвращает это:
const o = new Proxy({}, {
get(target, propName, receiver) {
if (propName === "constructor") {
throw new Error("Don't do that!");
}
return Reflect.get(target, propName, receiver);
}
});
console.log(o.constructor);