--- title: 'TypeError: "x" is read-only' slug: Web/JavaScript/Reference/Errors/Read-only tags: - Erreurs - JavaScript - TypeError translation_of: Web/JavaScript/Reference/Errors/Read-only original_slug: Web/JavaScript/Reference/Erreurs/Read-only ---
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)
{{jsxref("TypeError")}}
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'avec le mode strict. En mode non-strict, l'affectation est ignorée silencieusement.
Les propriétés en lecture seule ne sont pas fréquemment utilisées mais on peut en créer en utilisant les méthodes {{jsxref("Object.defineProperty()")}} ou {{jsxref("Object.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]++; // TypeError
Quelques 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; // TypeError
La variable globale undefined
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-only
"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` fonctionne NB_POUMONS = 3; // ok