Через
defineProperty()
Object.defineProperty(window, "test", {
value: "QnA"
});
Присвоение нового значения ошибки не вызовет, но и не сработает: сохранится указанное значение.
проверкиtest = "X";
test // "QnA"
var test = "Y";
test // "QnA"
window.test = "Habr";
test // "QnA"
const test = "Z" // Uncaught SyntaxError: redeclaration of var test
Тут не указано
writable: false
– оно и так по умолчанию false. И именно это свойство дескриптора определяет, можно ли назначить новое значение.
Если переменная/свойство уже были декларированы ранее, то надо явно указать
writable: false
, чтобы свойство стало «константным».
var test = "Habr";
Object.defineProperty(window, "test", {
value: "QnA",
writable: false,
});