This translation is incomplete. Please help translate this article from English.

Missatge

TipusError: "x" es només de lectura (Firefox)
TipusError: 0 es només de lectura (Firefox)
TipusError: No es pot fer l'assignació a la propietat 'x' de #<Object> que es només de lectura (Chrome)
TipusError: No es pot fer l'assignació a la propietat '0' de [object Array] (Chrome)

Tipus d'error

TypeError

Qué ha anat malament?

La variable global o propietat de l'objecte a la qual s'ha volgut fer l'assignació es només de lectura. (Tècnicament, es una propietat de no-escriptura.)

Aquest error succeeix només en codi en mode estricte. En codi en mode no estricte, l'assignació es ignorada de manera silenciosa.

Exemples

Casos invàlids

Propietats de només lectura no son súper comuns, però es poden donar quan es fa servir Object.defineProperty() o Object.freeze().

'use strict';
var 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';
var frozenArray = Object.freeze([0, 1, 2]);
frozenArray[0]++;  // TypeError

També hi ha unes poques propietats de només lectura en la construcció de JavaScript. Potser que hagis provat de redefinir una constant matemàtica.

'use strict';
Math.PI = 4;  // TypeError

Ho sentim, no pots fer això.

La variable global undefined també es només de lectura, llavors no pots silenciar l'infame error "undefined no es una funció" fent això:

'use strict';
undefined = function() {};  // TypeError: "undefined" es només de lectura

Valid cases

'use strict';
var obj = Object.freeze({name: 'Score', points: 157});
obj = {name: obj.name, points: 0};   // reemplaçant-ho amb un nou objecte funciona

'use strict';
var LUNG_COUNT = 2;  // Una `var` funciona, perque no es de només lectura
LUNG_COUNT = 3;  // ok (anatòmicament potser, però poc probable)

See also

Document Tags and Contributors

Contributors to this page: vilherda
Last updated by: vilherda,