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)

Тип ошибки

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

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

Примеры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

See also