aboutsummaryrefslogtreecommitdiff
path: root/files/fr/web/javascript/reference/operators/in/index.md
blob: 75a0dd1f8831fedcf198a1ea912587a2f29895ca (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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
---
title: L'opérateur in
slug: Web/JavaScript/Reference/Operators/in
tags:
  - JavaScript
  - Operator
  - Reference
translation_of: Web/JavaScript/Reference/Operators/in
original_slug: Web/JavaScript/Reference/Opérateurs/L_opérateur_in
---
{{jsSidebar("Operators")}}

L'**opérateur `in`** renvoie `true` si une propriété donnée appartient à l'objet donné (directement ou via sa chaîne de prototype).

{{EmbedInteractiveExample("pages/js/expressions-inoperator.html")}}

## Syntaxe

    propriété in nomObjet

### Paramètres

- `propriété`
  - : Une expression évaluée en un nombre ou une chaîne de caractères qui représente le nom d'une propriété ou l'indice d'un tableau.
- `nomObjet`
  - : Le nom de l'objet qu'on souhaite inspecter.

## Description

Les exemples suivants illustrent certaines utilisation de l'opérateur `in`.

```js
// Tableaux
var arbres = ["sapin", "hêtre", "cèdre", "chêne", "érable"];
0 in arbres        // renvoie true
3 in arbres        // renvoie true
6 in arbres        // renvoie false
"hêtre" in arbres  // renvoie false (l'indice doit être spécifié, pas la valeur à cet indice)
"length" in arbres // renvoie true (length est une propriété des objets Array)
Symbol.iterator in arbres // renvoie true (les tableaux sont itérables, à partir d'ES6)

// Objets prédéfinis
"PI" in Math           // renvoie true
var ma_chaine = new String("corail");
"length" in ma_chaine  // renvoie true

// Objets personnalisés
var voiture = {marque : "Honda", modèle : "Accord", année : 1998};
"marque" in voiture  // renvoie true
"modèle" in voiture  // renvoie true
"marque" in voiture // renvoie true
"Accord" in voiture // renvoie false
```

L'opérande droit doit toujours être du type objet (et pas un autre type primitif). Par exemple, on peut utiliser une chaîne créée avec le constructeur `String`, mais pas une chaîne littérale.

```js
var couleur1 = new String("vert");
"length" in couleur1 // renvoie true
var couleur2 = "corail";
"length" in couleur2 // génère une erreur (couleur n'est pas un objet String)
```

### Utilisation de l'opérateur `in` avec des propriétés supprimées ou indéfinies

Si une propriété est supprimée avec l'opérateur [`delete`](fr/R%c3%a9f%c3%a9rence_de_JavaScript_1.5_Core/Op%c3%a9rateurs/Op%c3%a9rateurs_sp%c3%a9ciaux/L'op%c3%a9rateur_delete), l'opérateur `in` renvoie `false` pour cette propriété.

```js
var voiture = {marque : "Honda", modèle : "Accord", année : 1998};
delete voiture.marque;
"marque" in voiture  // renvoie false

var arbres = new Array("sapin", "hêtre", "cèdre", "chêne", "érable");
delete arbres[3];
3 in arbres // renvoie false
```

Si une propriété est définie à {{jsxref("Objets_globaux/undefined", "undefined")}} mais n'est pas supprimée, l'opérateur `in` renverra `true` pour cette propriété.

```js
var voiture = {marque : "Honda", modèle : "Accord", année : 1998};
voiture.marque = undefined;
"marque" in voiture  // renvoie true

var arbres = new Array("sapin", "hêtre", "cèdre", "chêne", "érable");
arbres[3] = undefined;
3 in arbres // renvoie true
```

### Propriétés héritées

L'opérateur `in` renvoie `true` pour les propriétés qui appartiennent à la chaîne de prototypes. SI on souhaite la présence d'une propriété non-héritée, on utilisera plutôt {{jsxref("Object.prototype.hasOwnProperty()")}}.

```js
"toString" in {}; // renvoie true
```

## Spécifications

| Spécification                                                                                            | État                         | Commentaires                                          |
| -------------------------------------------------------------------------------------------------------- | ---------------------------- | ----------------------------------------------------- |
| {{SpecName('ESDraft', '#sec-relational-operators', 'Relational Operators')}}     | {{Spec2('ESDraft')}} |                                                       |
| {{SpecName('ES2015', '#sec-relational-operators', 'Opérateurs relationnels')}} | {{Spec2('ES2015')}}     |                                                       |
| {{SpecName('ES5.1', '#sec-11.8.7', 'Opérateur in')}}                                 | {{Spec2('ES5.1')}}     |                                                       |
| {{SpecName('ES3', '#sec-11.8.7', 'Opérateurs in')}}                                     | {{Spec2('ES3')}}         | Définition initiale. Implémentée avec JavaScript 1.4. |

## Compatibilité des navigateurs

{{Compat("javascript.operators.in")}}

## Voir aussi

- {{jsxref("Instructions/for...in","for...in")}}
- {{jsxref("Opérateurs/L_opérateur_delete","delete")}}
- {{jsxref("Object.prototype.hasOwnProperty()")}}
- {{jsxref("Reflect.has()")}}
- [Caractère énumérable des propriétés et rattachement](/fr/docs/Web/JavaScript/Caractère_énumérable_des_propriétés_et_rattachement)