TypeError: cannot use 'in' operator to search for 'x' in 'y'(не удается использовать 'in' оператор поиска для 'x' в 'y')

Сообщения

TypeError: недопустимый операнд в "in" (edge)
TypeError: правая часть 'in' должна быть объектом, есть 'x' (Firefox)
TypeError: невозможно использовать оператор 'in' для поиска 'x' в 'y' (Firefox, Chrome)

Тип ошибки

TypeError

Что пошло не так?

Оператор in можно использовать только для проверки наличия свойства в объекте. Вы не можете искать в строках, числах или других примитивных типах.

Примеры

Поиск в строках

В отличие от других языков программирования (например, Python), поиск в строках с помощью оператора in невозможен.

"Hello" in "Hello World"; 
// TypeError: cannot use 'in' operator to search for 'Hello' in 'Hello World'

Вместо этого вам нужно будет использоватьString.prototype.indexOf()или примеры

"Hello World".indexOf("Hello") !== -1; 
// true

Операнд не может бытьnull или undefined

Убедитесь, что объект, который вы осматриваете, на самом деле не null или undefined.

var foo = null;
"bar" in foo;
// TypeError: не удается использовать оператор 'in' для поиска 'bar' в 'foo' (Chrome)
// TypeError: правая часть 'in' должна быть объектом, полученным null (Firefox)

Оператор in всегда ожидает объект.

var foo = { baz: "bar" };
"bar" in foo; // false

"PI" in Math; // true
"pi" in Math; // false

Поиск в Массивах

Будьте осторожны при использовании оператора для поиска Array объекты. the in оператор проверяет номер индекса, а не его значение.

var trees = ['redwood', 'bay', 'cedar', 'oak', 'maple'];
3 in trees; // true
"oak" in trees; // false

See also