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;
// trueDer 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