TypeError: Недопустимое присваивание константе "x"
Исключение JavaScript "invalid assignment to const" возникает, когда была предпринята попытка изменить значение константы. Объявления JavaScript const не могут быть переприсвоены или переобъявлены.
Сообщение
TypeError: Assignment to constant variable. (V8-based) TypeError: invalid assignment to const 'x' (Firefox) TypeError: Attempted to assign to readonly property. (Safari)
Тип ошибки
Что пошло не так?
Константа — это значение, которое не может быть изменено программой во время нормального выполнения. Оно не может быть изменено через повторное присвоение и не может быть переобъявлено. В JavaScript константы объявляются с использованием ключевого слова const.
Примеры
Недопустимое переобъявление
Присвоение значения тому же имени константы в той же блочной области видимости вызовет ошибку.
const COLUMNS = 80; // … COLUMNS = 120; // TypeError: invalid assignment to const `COLUMNS'
Исправление ошибки
Существует несколько вариантов исправления этой ошибки. Проверьте, что вы намеревались сделать с данной константой.
Переименование
Если вы собирались объявить другую константу, выберите другое имя и переименуйте ее. Это имя константы уже занято в данной области видимости.
const COLUMNS = 80; const WIDE_COLUMNS = 120;
const, let или var?
Не используйте const, если вы не собирались объявлять константу. Возможно, вы хотели объявить переменную с областью видимости блока с помощью let или глобальную переменную с помощью var.
let columns = 80; // … columns = 120;
Область видимости
Проверьте, находитесь ли вы в правильной области видимости. Должна ли эта константа появляться в этой области видимости или она предназначалась для использования, например, в функции?
const COLUMNS = 80;
function setupBigScreenEnvironment() {
const COLUMNS = 120;
}
const и неизменяемость
Объявление const создает ссылку только для чтения на значение. Это **не** означает, что само хранимое значение неизменяемо (иммутабельно), а лишь то, что идентификатор переменной не может быть переприсвоен. Например, если содержимое является объектом, это означает, что сам объект все еще может быть изменен. Это означает, что вы не можете изменить значение, хранящееся в переменной:
const obj = { foo: "bar" };
obj = { foo: "baz" }; // TypeError: invalid assignment to const `obj'
Но вы можете изменять свойства в переменной:
obj.foo = "baz";
obj; // { foo: "baz" }
См. также
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Invalid_const_assignment