Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

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

TypeError nur im strict mode.

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