TypeError: invalid 'in' operand "x"

Message

TypeError: Invalid operand to 'in' (Edge)
TypeError: right-hand side of 'in' should be an object, got 'x' (Firefox)
TypeError: cannot use 'in' operator to search for 'x' in 'y' (Firefox, Chrome)

Type d'erreur

Quel est le problème ?

L'op√©rateur in peut uniquement √™tre utilis√© pour v√©rifier qu'une propri√©t√© appartient √† un objet. Il ne peut pas √™tre utilis√© pour rechercher des caract√®res dans des cha√ģnes de caract√®res, des nombres ou dans d'autres types de donn√©es en dehors des objets.

Exemples

Rechercher un texte dans une cha√ģne de caract√®res

√Ä la diff√©rence de certains langages de programmation (Python par exemple), JavaScript ne permet pas de chercher des textes dans une cha√ģne de caract√®res gr√Ęce √† l'op√©rateur in.

"Coucou" in "Coucou monde";
// TypeError: cannot use 'in' operator to search for 'Coucou' in 'Coucou monde'

On utilisera plut√īt la m√©thode String.prototype.indexOf() :

"Coucou monde".indexOf("Coucou") !== -1;
// true

null ou undefined ne fonctionnent pas

Avant d'utiliser in, il faut s'assurer que la valeur qu'on inspecte n'est pas null ou undefined.

var toto = null;
"truc" in toto;
// TypeError: cannot use 'in' operator to search for 'truc' in 'toto" (Chrome)
// TypeError: right-hand side of 'in' should be an object, got null (Firefox)

L'opérateur in doit être utilisé avec un objet.

var toto = { machin: "bidule" };
"truc" in toto; // false

"PI" in Math; // true
"pi" in Math; // false

Rechercher dans un tableau

Attention lorsqu'on utilise l'opérateur in quand on recherche une valeur dans un objet Array. L'opérateur in vérifie la présence de l'index mais pas la valeur présente à cet index.

var arbres = ['cèdre', 'bouleau', 'pin', 'sapin', 'érable'];
3 in arbres; // true
"pin" in arbres; // false

Voir aussi