aboutsummaryrefslogtreecommitdiff
path: root/files/fr/web/javascript/reference/errors/delete_in_strict_mode/index.md
blob: 19d3f9b7475fc288292f95218ccf034c3ef3bf4f (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
---
title: >-
  SyntaxError: applying the 'delete' operator to an unqualified name is
  deprecated
slug: Web/JavaScript/Reference/Errors/Delete_in_strict_mode
tags:
  - Erreurs
  - JavaScript
  - SyntaxError
translation_of: Web/JavaScript/Reference/Errors/Delete_in_strict_mode
original_slug: Web/JavaScript/Reference/Erreurs/Delete_in_strict_mode
---
{{jsSidebar("Errors")}}

## Message

    SyntaxError: Calling delete on expression not allowed in strict mode (Edge)
    SyntaxError: applying the 'delete' operator to an unqualified name is deprecated (Firefox)
    SyntaxError: Delete of an unqualified identifier in strict mode. (Chrome)

## Type d'erreur

{{jsxref("SyntaxError")}}, uniquement en [mode strict](/fr/docs/Web/JavaScript/Reference/Strict_mode).

## Quel est le problème ?

Les variables JavaScript ne peuvent pas être supprimées grâce à l'opérateur [`delete`](/fr/docs/Web/JavaScript/Reference/Opérateurs/L_opérateur_delete). En mode strict, toute tentative de suppression d'une variable lèvera une exception.

L'opérateur `delete` sert uniquement à supprimer des propriétés sur un objet. Les propriétés d'un objet sont « qualifiées » si elles sont configurables.

Contrairement à ce qu'on pourrait penser, l'opérateur `delete` n'a rien à voir avec la libération de la mémoire. La gestion de la mémoire se fait indirectement en cassant les références utilisées. Pour plus d'informations, consulter les pages sur [`delete`](/fr/docs/Web/JavaScript/Reference/Opérateurs/L_opérateur_delete) et [la gestion de la mémoire en JavaScript](/fr/docs/Web/JavaScript/Gestion_de_la_mémoire).

Cette erreur ne se produit qu'en [mode strict](/fr/docs/Web/JavaScript/Reference/Strict_mode). En mode non-strict, l'opération renvoie simplement `false`.

## Exemples

Essayer de supprimer une variable normale avec `delete` ne fonctionne pas, voire lève une exception en mode strict :

```js example-bad
'use strict';

var x;

// ...

delete x;

// SyntaxError: applying the 'delete' operator to
// an unqualified name is deprecated
```

Pour libérer le contenu d'une variable, on peut la passer à {{jsxref("null")}} :

```js example-good
'use strict';

var x;
// ...
x = null;

// x peut être ramassée par le ramasse-miettes
```

## Voir aussi

- [`delete`](/fr/docs/Web/JavaScript/Reference/Opérateurs/L_opérateur_delete)
- [La gestion de la mémoire en JavaScript](/fr/docs/Web/JavaScript/Gestion_de_la_mémoire)
- [TypeError: property "x" is non-configurable and can't be deleted](/en-US/docs/Web/JavaScript/Reference/Errors/Cant_delete)