aboutsummaryrefslogtreecommitdiff
path: root/files/fr/web/javascript/reference/errors/read-only/index.md
blob: e207e6dc2a57447a3a03d841e323f3b6851f959b (plain)
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
80
81
82
---
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
---
{{jsSidebar("Errors")}}

## 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)

## Type d'erreur

{{jsxref("TypeError")}}

## Quel 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](/fr/docs/Web/JavaScript/Reference/Objets_globaux/Object/defineProperty#Attribut_writable)).

Cette erreur ne se produit qu'avec [le mode strict](/fr/docs/Web/JavaScript/Reference/Strict_mode). 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éthodes {{jsxref("Object.defineProperty()")}} ou {{jsxref("Object.freeze()")}}.

```js example-bad
"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.

```js example-bad
"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 :

```js example-bad
"use strict";
undefined = function () {};
// TypeError: "undefined" is read-only
```

### Exemples valides

```js example-good
"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
```

## Voir aussi

- {{jsxref("Object.defineProperty()")}}
- {{jsxref("Object.freeze()")}}