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', [])); // [] преобразуется в 0true true
История изменений
Метод Array.prototype.includes был добавлен в стандарт ECMAScript 2016 (ES7). Метод String.prototype.includes появился в ES6 (ECMAScript 2015). С момента добавления семантика и поведение методов не претерпели значительных изменений.
В современных версиях JavaScript оба метода полностью поддерживаются. Ранее для массивов использовались полифиллы или метод indexOf.
Расширенные примеры
1. Поиск с отрицательного индекса в массиве.
const arr = ['a', 'b', 'c', 'd'];
console.log(arr.includes('c', -2)); // Ищет 'c' начиная с индекса 2 (4 + (-2))
console.log(arr.includes('c', -1)); // Ищет 'c' начиная с индекса 3true false
2. Проверка наличия нескольких подстрок в строке.
const str = 'Котёнок и щенок играют';
const checks = ['кот', 'щенок'];
const allFound = checks.every(word => str.toLowerCase().includes(word));
console.log(allFound);true
3. Использование в условных операторах для валидации.
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 только при наличии ссылки на тот же объект.
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.
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;