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 #
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