TypeError: cannot use 'in' operator to search for 'x' in 'y'
Fehlermeldung
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)
Fehlertyp
Was ist falsch gelaufen?
Der in
Operator kan nur für das Prüfen von Eigenschaften in Objekten genutzt werden. Man kann nicht in Strings, Nummern oder anderen primitiven Typen suchen.
Beispiele
Suchen in Strings
Im Vergleich zu anderen Programmiersprachen (z. B. Python) kann in Strings nicht mit dem in
Operator gesucht werden.
"Hello" in "Hello World";
// TypeError: cannot use 'in' operator to search for 'Hello' in 'Hello World'
Stattdessen kann zum Beispiel String.prototype.indexOf()
eingesetzt werden.
"Hello World".indexOf("Hello") !== -1;
// true
Der Operand kann nicht null
oder undefined
sein
Man muss sicherstellen, dass der Operand nicht null
oder undefined
ist.
var foo = null;
"bar" in foo;
// TypeError: cannot use 'in' operator to search for 'bar' in 'foo' (Chrome)
// TypeError: right-hand side of 'in' should be an object, got null (Firefox)
Der in
Operator erwartet immer ein Objekt.
var foo = { baz: "bar" };
"bar" in foo; // false
"PI" in Math; // true
"pi" in Math; // false
Suchen in Arrays
Man muss vorsichtig sein, wenn der in
Operator in Array
Objekten genutzt wird. Der in
Operator prüft die Indexnummern, aber nicht die Werte des Indizes.
var trees = ['redwood', 'bay', 'cedar', 'oak', 'maple'];
3 in trees; // true
"oak" in trees; // false