TypeError: "x" доступно только для чтения
Исключение JavaScript "доступно только для чтения", возникающее только в строгом режиме, происходит, когда глобальная переменная или свойство объекта, которому было присвоено значение, является свойством, доступным только для чтения.
Сообщение
TypeError: Cannot assign to read only property 'x' of #<Object> (V8-based) TypeError: "x" is read-only (Firefox) TypeError: Attempted to assign to readonly property. (Safari)
Тип ошибки
TypeError только в строгом режиме.
Что пошло не так?
Глобальная переменная или свойство объекта, которому было присвоено значение, является свойством, доступным только для чтения. (Технически, это свойство данных, не подлежащее записи.)
Эта ошибка возникает только в коде строгого режима. В нестрогом коде присваивание молча игнорируется.
Примеры
Неверные случаи
Свойства, доступные только для чтения, встречаются не очень часто, но их можно создать с помощью Object.defineProperty() или Object.freeze().
"use strict";
const obj = Object.freeze({ name: "Elsa", score: 157 });
obj.score = 0; // TypeError
("use strict");
Object.defineProperty(this, "LUNG_COUNT", { value: 2, writable: false });
LUNG_COUNT = 3; // TypeError
("use strict");
const frozenArray = Object.freeze([0, 1, 2]);
frozenArray[0]++; // TypeError
Также в JavaScript встроено несколько свойств, доступных только для чтения. Возможно, вы попытались переопределить математическую константу.
"use strict"; Math.PI = 4; // TypeError
Извините, вы не можете это сделать.
Глобальная переменная undefined также доступна только для чтения, поэтому вы не можете заглушить печально известную ошибку "undefined is not a function", выполнив следующее:
"use strict";
undefined = function () {}; // TypeError: "undefined" is read-only
Верные случаи
"use strict";
let obj = Object.freeze({ name: "Score", points: 157 });
obj = { name: obj.name, points: 0 }; // replacing it with a new object works
См. также
© 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/Read-only