TypeError: "x" ist schreibgeschützt

Die JavaScript-strict mode-only Ausnahme "ist schreibgeschützt" tritt auf, wenn einer globalen Variable oder einem Objekteigenschaft ein schreibgeschützter Wert zugewiesen wurde.

Meldung

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) 

Fehlertyp

Was ist schiefgelaufen?

Der globalen Variable oder der Objekteigenschaft, der zugewiesen wurde, ist eine schreibgeschützte Eigenschaft. (Technisch gesehen ist es eine nicht-schreibbare Dateneigenschaft.)

Dieser Fehler tritt nur im strict mode code auf. In nicht-strict code wird die Zuweisung stillschweigend ignoriert.

Beispiele

Ungültige Fälle

Schreibgeschützte Eigenschaften sind nicht sehr häufig, können aber 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 ebenfalls schreibgeschützt, sodass Sie den berüchtigten Fehler "undefined is not a function" nicht durch Folgendes unterdrücken 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