Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
TypeError: "x" ist schreibgeschützt
Die JavaScript-strict mode-only Ausnahme"ist schreibgeschützt" tritt auf, wenn einer globalen Variable oder einem Objekteigenschaftein schreibgeschützter Wert zugewiesen wurde.
In diesem Artikel
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 imstrict mode.
Was ist schiefgelaufen?
Der globalen Variable oder der Objekteigenschaft, der zugewiesen wurde, ist eine schreibgeschützte Eigenschaft.(Technisch gesehen ist es einenicht-schreibbare Dateneigenschaft.)
Dieser Fehler tritt nur imstrict mode code auf. Innicht-strict code wird die Zuweisung stillschweigend ignoriert.
Beispiele
>Ungültige Fälle
Schreibgeschützte Eigenschaften sind nicht sehr häufig, können aber mitObject.defineProperty() oderObject.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]++; // TypeErrorEs 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; // TypeErrorEntschuldigung, das können Sie nicht tun.
Die globale Variableundefined ist ebenfalls schreibgeschützt, sodass Sie denberüchtigten Fehler "undefined is not a function" nicht durch Folgendes unterdrücken können:
"use strict";undefined = function () {}; // TypeError: "undefined" is read-onlyGü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