1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
---
title: 'TipusError: "x" es només de lectura'
slug: Web/JavaScript/Reference/Errors/Read-only
tags:
- Errors
- JavaScript
- TypeError
translation_of: Web/JavaScript/Reference/Errors/Read-only
original_slug: Web/JavaScript/Reference/Errors/Nomes-Lectura
---
<div>{{jsSidebar("Errors")}}</div>
<h2 id="Missatge">Missatge</h2>
<pre class="syntaxbox">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)
</pre>
<h2 id="Tipus_d'error">Tipus d'error</h2>
<p>{{jsxref("TypeError")}}</p>
<h2 id="Qué_ha_anat_malament">Qué ha anat malament?</h2>
<p>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 <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty#Writable_attribute">propietat de no-escriptura</a>.)</p>
<p>Aquest error succeeix només en <a href="/en-US/docs/Web/JavaScript/Reference/Strict_mode">codi en mode estricte</a>. En codi en mode no estricte, l'assignació es ignorada de manera silenciosa.</p>
<h2 id="Exemples">Exemples</h2>
<h3 id="Casos_invàlids">Casos invàlids</h3>
<p>Propietats de només lectura no son súper comuns, però es poden donar quan es fa servir {{jsxref("Object.defineProperty()")}} o {{jsxref("Object.freeze()")}}.</p>
<pre class="brush: js example-bad">'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
</pre>
<p>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.</p>
<pre class="brush: js example-bad">'use strict';
Math.PI = 4; // TypeError</pre>
<p>Ho sentim, no pots fer això.</p>
<p>La variable global <code>undefined</code> també es només de lectura, llavors no pots silenciar l'infame error "undefined no es una funció" fent això:</p>
<pre class="brush: js example-bad">'use strict';
undefined = function() {}; // TypeError: "undefined" es només de lectura
</pre>
<h3 id="Valid_cases">Valid cases</h3>
<pre class="brush: js example-good">'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)
</pre>
<h2 id="See_also">See also</h2>
<ul>
<li>{{jsxref("Object.defineProperty()")}}</li>
<li>{{jsxref("Object.freeze()")}}</li>
</ul>
|