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