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
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: 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
<code>null</code> ou <code>undefined</code> 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