Learn JavaScript

includes() - метод для проверки наличия элемента в массиве в JavaScript

includes() проверяет, есть ли в массиве указанное значение.

Это удобный метод, когда нужен простой ответ: элемент есть или его нет.

Синтаксис

array.includes(value)
array.includes(value, fromIndex)

value - значение, которое нужно найти.

fromIndex - позиция, с которой начинать поиск.

Что делает includes()

Метод проходит по массиву и проверяет, встречается ли в нём нужное значение.

const numbers = [10, 20, 30];

console.log(numbers.includes(20)); // true
console.log(numbers.includes(50)); // false

Что возвращает includes()

includes() всегда возвращает булево значение:

  • true, если элемент найден
  • false, если элемент не найден
const fruits = ["apple", "banana", "orange"];

console.log(fruits.includes("banana")); // true
console.log(fruits.includes("grape"));  // false

Это главное, что нужно запомнить про метод.

Поиск с fromIndex

Вторым аргументом можно указать, с какой позиции начинать поиск.

const numbers = [1, 2, 3, 2];

console.log(numbers.includes(2, 2)); // true
console.log(numbers.includes(1, 2)); // false

Здесь поиск начинается с индекса 2.

Отрицательный fromIndex

fromIndex может быть отрицательным.

В этом случае отсчёт идёт с конца массива.

const numbers = [1, 2, 3, 4];

console.log(numbers.includes(3, -2)); // true
console.log(numbers.includes(2, -2)); // false

Это удобно, когда нужно искать только в хвосте массива.

includes() и indexOf()

Эти методы часто решают похожую задачу, но возвращают разное.

const numbers = [10, 20, 30];

console.log(numbers.includes(20)); // true
console.log(numbers.indexOf(20));  // 1

includes() отвечает на вопрос “есть ли элемент?”.

indexOf() отвечает на вопрос “на каком индексе находится элемент?”.

Если нужна просто проверка, includes() обычно читается понятнее.

includes() умеет находить NaN

Это важное отличие от indexOf().

const values = [1, 2, NaN];

console.log(values.includes(NaN)); // true
console.log(values.indexOf(NaN));  // -1

Поэтому для проверки наличия NaN удобнее использовать именно includes().

Объекты сравниваются по ссылке

Если в массиве лежат объекты, includes() сравнивает не содержимое, а ссылку на объект.

const user = { id: 1 };
const users = [user];

console.log(users.includes(user));     // true
console.log(users.includes({ id: 1 })); // false

На вид объекты одинаковые, но это разные ссылки в памяти.

includes() не меняет исходный массив

Метод только проверяет наличие значения и не изменяет массив.

const numbers = [1, 2, 3];
const result = numbers.includes(2);

console.log(numbers); // [1, 2, 3]
console.log(result);  // true

Пустые слоты

includes() работает с пустыми слотами как с undefined.

const arr = Array(3);

console.log(arr.includes(undefined)); // true

Это может выглядеть неожиданно, особенно если до этого использовать методы вроде map() или filter(), которые пустые слоты пропускают.

Когда это полезно

includes() удобно использовать, когда:

  • нужно проверить наличие примитивного значения в массиве
  • нужен ответ true или false
  • важно быстро и читаемо проверить наличие элемента

Пример:

const roles = ["user", "editor", "admin"];

const canEdit = roles.includes("editor");

console.log(canEdit); // true

Частые ошибки

Думать, что includes() возвращает индекс

const numbers = [1, 2, 3];
const result = numbers.includes(2);

console.log(result); // true

Если нужен индекс, нужен indexOf().

Сравнивать объекты по содержимому

const items = [{ id: 1 }];

console.log(items.includes({ id: 1 })); // false

Для объектов сравнение идёт по ссылке.

Забывать про fromIndex

const numbers = [1, 2, 3, 2];

console.log(numbers.includes(2, 3)); // true

Поиск начинается не с начала массива, а с указанной позиции.

Быстрая памятка

  • includes() проверяет, есть ли значение в массиве
  • метод возвращает true или false
  • можно задать стартовую позицию поиска через fromIndex
  • includes() умеет находить NaN
  • для объектов сравнение идёт по ссылке

Коротко

includes() - это удобный способ быстро проверить, есть ли значение в массиве. Главное, что стоит запомнить: метод возвращает только true или false, а не индекс, и обычно читается проще, чем indexOf() !== -1.