Cette page a été traduite à partir de l'anglais par la communauté.Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.
TypeError: "x" is read-only
Message
TypeError: Assignment to read-only properties is not allowed in strict mode (Edge)TypeError: "x" is read-only (Firefox)TypeError: 0 is read-only (Firefox)TypeError: Cannot assign to read only property 'x' of #<Object> (Chrome)TypeError: Cannot assign to read only property '0' of [object Array] (Chrome)
Dans cet article
Type d'erreur
TypeErrorQuel est le problème ?
La variable globale ou la propriété ne peut pas recevoir de valeur ou être modifiée car elle est en lecture seule (d'un point de vue technique, il s'agit d'une propriété de donnée en lecture seule).
Cette erreur ne se produit qu'avecle mode strict. En mode non-strict, l'affectation est ignorée silencieusement.
Exemples
>Exemples invalides
Les propriétés en lecture seule ne sont pas fréquemment utilisées mais on peut en créer en utilisant les méthodesObject.defineProperty() ouObject.freeze().
"use strict";var obj = Object.freeze({ name: "Elsa", score: 157 });obj.score = 0; // TypeError("use strict");Object.defineProperty(this, "NB_POUMONS", { value: 2, writable: false });NB_POUMONS = 3; // TypeError("use strict");var frozenArray = Object.freeze([0, 1, 2]);frozenArray[0]++; // TypeErrorQuelques propriétés natives JavaScript sont également en lecture seule. Par exemple, on obtient cette erreur lorsqu'on souhaite redéfinir une constante mathématique.
"use strict";Math.PI = 4; // TypeErrorLa variable globaleundefined est également en lecture seule. On ne peut donc pas faire disparaître la fameuse erreur "undefined is not a function" avec ce code :
"use strict";undefined = function () {};// TypeError: "undefined" is read-onlyExemples valides
"use strict";var obj = Object.freeze({ name: "Score", points: 157 });obj = { name: obj.name, points: 0 };// En changeant d'objet, ça fonctionne("use strict");var NB_POUMONS = 2; // `var` fonctionneNB_POUMONS = 3; // ok