Includes: примеры (JAVASCRIPT)

Функция includes в языке JavaScript: полное руководство
Раздел: Массивы, Поиск
includes(searchElement: T, fromIndex?: number): boolean

Основы метода includes

Метод includes() в JavaScript определяет, содержится ли искомый элемент или подстрока в исходной строке или массиве. Метод возвращает логическое значение true или false, что делает его удобным для условных проверок.

Использование метода актуально в задачах поиска, валидации данных или фильтрации без необходимости получения точной позиции элемента.

Для строк метод имеет следующий синтаксис: str.includes(searchString[, position]).

  • searchString: Строка для поиска внутри исходной. Обязательный аргумент.
  • position: Необязательный числовой параметр, указывающий позицию (индекс) в исходной строке, с которой начинается поиск. Значение по умолчанию — 0.

Для массивов синтаксис похож: arr.includes(searchElement[, fromIndex]).

  • searchElement: Искомый элемент массива.
  • fromIndex: Необязательный индекс, с которого начинается поиск. При отрицательных значениях поиск начинается с индекса array.length + fromIndex. По умолчанию равен 0.

При поиске в строках метод учитывает регистр символов. Для массивов поиск использует алгоритм SameValueZero, где NaN считается равным NaN, а -0 и +0 равны.

Простые примеры использования

Работа со строками:

const str = 'Привет, мир!';
console.log(str.includes('мир'));
console.log(str.includes('Мир'));
console.log(str.includes('Привет', 1));
true
false
false

Работа с массивами:

const arr = [1, 2, 3, NaN, -0];
console.log(arr.includes(2));
console.log(arr.includes(4));
console.log(arr.includes(NaN));
console.log(arr.includes(0)); // +0 равен -0
console.log(arr.includes(2, 2));
true
false
true
true
false

Похожие методы в JavaScript

indexOf(): Возвращает индекс первого найденного элемента или -1. Подходит для строк и массивов. Основное отличие от includes() — возвращаемое значение (индекс, а не boolean) и неспособность корректно находить NaN в массивах. Использование indexOf() предпочтительнее, когда нужна позиция элемента.

const arr = [1, 2, NaN];
console.log(arr.indexOf(NaN));
console.log(arr.includes(NaN));
-1
true

some(): Метод для массивов, проверяющий, удовлетворяет ли хотя бы один элемент заданному условию в функции-колбэке. Используется для более сложных проверок, чем простое сравнение.

const arr = [1, 2, 3];
console.log(arr.some(el => el > 2));
console.log(arr.includes(2));
true
true

String.prototype.search() и String.prototype.match(): Методы для поиска с использованием регулярных выражений в строках.

Типичные ошибки

1. Неучёт регистра символов в строках. Метод чувствителен к регистру.

console.log('JavaScript'.includes('java'));
false

2. Ожидание приведения типов. В массивах поиск идёт по строгому сравнению.

console.log([1, 2, 3].includes('1'));
console.log([1, 2, 3].includes(1));
false
true

3. Поиск объекта по ссылке. Метод не выполняет глубокое сравнение объектов.

const obj = {id: 1};
console.log([{id: 1}].includes(obj));
console.log([obj].includes(obj));
false
true

4. Неявное преобразование аргумента position/fromIndex. Некорректные значения преобразуются в целое число.

const str = 'abc';
console.log(str.includes('b', '1')); // '1' преобразуется в 1
console.log(str.includes('b', [])); // [] преобразуется в 0
true
true

История изменений

Метод Array.prototype.includes был добавлен в стандарт ECMAScript 2016 (ES7). Метод String.prototype.includes появился в ES6 (ECMAScript 2015). С момента добавления семантика и поведение методов не претерпели значительных изменений.

В современных версиях JavaScript оба метода полностью поддерживаются. Ранее для массивов использовались полифиллы или метод indexOf.

Расширенные примеры

1. Поиск с отрицательного индекса в массиве.

Пример javascript
const arr = ['a', 'b', 'c', 'd'];
console.log(arr.includes('c', -2)); // Ищет 'c' начиная с индекса 2 (4 + (-2))
console.log(arr.includes('c', -1)); // Ищет 'c' начиная с индекса 3
true
false

2. Проверка наличия нескольких подстрок в строке.

Пример javascript
const str = 'Котёнок и щенок играют';
const checks = ['кот', 'щенок'];
const allFound = checks.every(word => str.toLowerCase().includes(word));
console.log(allFound);
true

3. Использование в условных операторах для валидации.

Пример javascript
function validateEmail(email) {
  if (!email.includes('@') || !email.includes('.')) {
    return 'Некорректный email';
  }
  return 'OK';
}
console.log(validateEmail('user.example.com'));
console.log(validateEmail('user@example.com'));
Некорректный email
OK

4. Поиск в массиве сложных типов. Для объектов можно использовать includes только при наличии ссылки на тот же объект.

Пример javascript
const users = [{id: 1}, {id: 2}];
const currentUser = users[0];
console.log(users.includes(currentUser));
console.log(users.includes({id: 1})); // Новый объект, другая ссылка
true
false

5. Проверка на наличие пустой строки. Пустая строка всегда возвращает true.

Пример javascript
console.log('Любой текст'.includes(''));
console.log(''.includes(''));
true
true

Аналоги функции в других языках

PHP: Функция str_contains() (появилась в PHP 8) ищет подстроку в строке. Для массивов используется in_array().

echo str_contains('Hello world', 'world');
var_dump(in_array('apple', ['banana', 'apple']));
1
bool(true)

Python: Оператор in работает для строк, списков, кортежей и множеств.

print('world' in 'Hello world')
print(2 in [1, 2, 3])
True
True

MySQL: Оператор LIKE или функция INSTR() для строк. Для поиска в наборе значений используется оператор IN.

SELECT 'Hello world' LIKE '%world%';
SELECT 2 IN (1, 2, 3);
1
1

C/C++: Для строк в стиле C используется функция strstr(). В C++ для объектов std::string применяется метод find().

// C++
std::string str = "Hello world";
bool found = str.find("world") != std::string::npos;

JS includes function comments

En
Includes Determines whether an array or string includes a certain value