TypeError: "x" ist schreibgeschützt
Die JavaScript-Strict Mode-only-Ausnahme „ist schreibgeschützt“ tritt auf, wenn eine globale Variable oder eine Objekteigenschaft, die zugewiesen wurde, eine schreibgeschützte Eigenschaft ist.
Mitteilung
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)
Fehlerart
TypeError
in Strict Mode only.
Was schiefgelaufen ist
Die globale Variable oder Objekteigenschaft, die zugewiesen wurde, ist eine schreibgeschützte Eigenschaft. (Technisch gesehen handelt es sich um eine nicht-schreibbare Dateneigenschaft.)
Dieser Fehler tritt nur im Strict Mode Code auf. In Nicht-Strict-Code wird die Zuweisung still ignoriert.
Beispiele
Ungültige Fälle
Schreibgeschützte Eigenschaften sind nicht allzu häufig, können jedoch mit
Object.defineProperty()
oder Object.freeze()
erstellt werden.
"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
Es gibt auch einige schreibgeschützte Eigenschaften, die in JavaScript eingebaut sind. Vielleicht haben Sie versucht, eine mathematische Konstante neu zu definieren.
"use strict";
Math.PI = 4; // TypeError
Entschuldigung, das können Sie nicht tun.
Die globale Variable undefined
ist auch schreibgeschützt, sodass Sie den berüchtigten Fehler „undefined is not a function“ nicht durch Folgendes beheben können:
"use strict";
undefined = function () {}; // TypeError: "undefined" is read-only
Gültige Fälle
"use strict";
let obj = Object.freeze({ name: "Score", points: 157 });
obj = { name: obj.name, points: 0 }; // replacing it with a new object works