TypeError: invalid 'in' operand "x"

Message

TypeError: invalid 'in' operand "x" (Firefox)
TypeError: Cannot use 'in' operator to search for 'x' in y (Chrome)

Type d'erreur

TypeError

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: invalid 'in' operand "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: invalid 'in' operand "toto"

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

Étiquettes et contributeurs liés au document

Étiquettes : 
 Contributeurs à cette page : SphinxKnight
 Dernière mise à jour par : SphinxKnight,