Эта статья представляет собой стенограмму моей бесплатной серии YouTube об основах веб-разработки. Если вы предпочитаете смотреть, а не читать, не стесняйтесь посетить мой канал Dev Newbs.
Привет, мои коллеги-новички, и добро пожаловать обратно в серию статей «Основы Javascript» о встроенном объекте String. Тема этого прекрасного дня - метод includes (). Давай не парить. Мы собираемся нырнуть прямо сейчас.
Метод includes () выполняет поиск с учетом регистра, чтобы определить, можно ли найти указанную строку в искомой строке. Возвращаемое значение может быть истинным или ложным в зависимости от результата поиска. Метод имеет два параметра. Первый параметр является обязательным, и это значение строки, которое проверяется на наличие в строке поиска. Второй параметр является необязательным и указывает позицию для начала поиска. Если он не указан, по умолчанию используется значение 0. Давайте посмотрим, как все это работает в первом примере.
let searchedString = "Hello my fellow dev newbs! 🙂"; let stringToLookFor = "fellow"; searchedString.includes(stringToLookFor) // true searchedString.includes(stringToLookFor, 9) // true searchedString.includes(stringToLookFor, 12) // false
Первый и второй результат верны, потому что диапазон, используемый для поиска, включает строку «приятель», которую мы проверяем на наличие. Последний результат - ложь, потому что указанный нами индекс 12 приводит к тому, что искомая строка начинается с середины слова «приятель», что означает, что мы не можем найти все слово в указанном диапазоне.
Я уже упоминал об этом, но это частый случай ошибок, поэтому подчеркну еще раз. Этот метод чувствителен к регистру. Это означает, что он различает строчные и прописные буквы букв алфавита. Имейте это в виду, если вы попытаетесь их найти.
Давайте посмотрим, о чем я говорю, в примере 2.
searchedString.includes("Dev") // false searchedString.includes("dev") // true searchedString.includes("hello") // false searchedString.includes("Hello") // true searchedString.includes("NEWBS") // false searchedString.includes("newbs") // true
Первая версия для каждой искомой строки неверна из-за чувствительности к регистру. Следующий правильный. Это совершенно ясно, поэтому нет необходимости анализировать это дальше. Просто следите за этим в своем коде. Потому что ты знаешь, что они говорят? Глупые ошибки найти труднее всего.
Хорошо, все было хорошо, но давайте перейдем к более серьезному делу - работе с кодовыми единицами и кодовыми точками. Я не упоминал об этом, но на данный момент это почти невысказанное правило: если мы имеем дело с индексами или позициями, мы всегда используем единицы кода. Итак, как этот метод ведет себя в случае символов, состоящих из нескольких кодовых единиц? Давайте проверим это на последнем примере дня:
let smileyFace = "🙂"; // smileyFace: // 0 -> "\ud83d" // 1 -> "\ude42" smileyFace.includes("🙂") // true smileyFace.includes("\ud83d\ude42") // true smileyFace.includes("🙂", 1) // false smileyFace.includes("\ude42", 1) // true // 2 smiley faces: // 0 -> "\ud83d" // 1 -> "\ude42" // 2 -> "\ud83d" // 3 -> "\ude42" "🙂🙂".includes('\ude42\ud83d', 1) // true "🙂🙂".includes('\ude42\ud83d', 2) // false
У нас есть строковая переменная, которая содержит один смайлик-смайлик. Длина этой строки равна 2 единицам кода. Первые два случая в основном идентичны. Мы проверяем, содержит ли строка со смайликом строку со смайликом. Очевидно результат верный. Единственная разница в том, как я указал строку для поиска. В первом случае я использовал смайлы напрямую. Во втором случае я использовал синтаксис Unicode с префиксом «\ u». Однако для Javascript это то же самое.
Прежде чем мы рассмотрим вторую пару случаев, обратите внимание на комментарий, который я написал после объявления переменной smileyFace. Он показывает, как смайлы сохраняются в переменной и какое значение кодовой единицы сохраняется в каком индексе. Хорошо, вернемся к коду.
Первый случай во втором наборе неверен, потому что мы ограничили диапазон поиска только второй единицей кода эмодзи и не включает весь символ эмодзи. Однако вторая половина содержит именно то значение, которое мы ищем во втором случае, поэтому результат верен.
В последнем наборе показан более сложный пример с двумя смайликами. Давай закончим серию на ура, да? Первый случай - поиск строки, состоящей из второй половины символа эмодзи, за которой следует первая половина символа эмодзи. К счастью для нас, это именно то значение, которое простирается от позиции 1 до позиции 2, так что результат верен. Во втором случае диапазон поиска, не содержащий этой последовательности кодовых единиц, еще более ограничен. Это приводит к возврату false в результате этого поиска.
Хорошо, это все, что касается метода includes (). Я думаю, что отныне вы сможете использовать в своем коде метод includes ().
А вот один глупый мем, который я сделал только для этой публикации на Medium, так что, надеюсь, вы можете немного посмеяться. Вот оно:
Спасибо за внимание, не могу дождаться встречи с вами в следующей статье.