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

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.

js
"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.

js
"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:

js
"use strict";
undefined = function () {}; // TypeError: "undefined" is read-only

Gültige Fälle

js
"use strict";
let obj = Object.freeze({ name: "Score", points: 157 });
obj = { name: obj.name, points: 0 }; // replacing it with a new object works

Siehe auch