Метод indexOf()

Javascript

Строки (String) в JavaScript представляют собой текстовый тип данных. Строка может быть длиной в один символ, а также представлять целый абзац. Максимальный размер строки может быть не более 2 Гб. Для каждого символа в строке выделяется 2 байта (16 бит) по кодировке UTF-16. Это значит, что один строка поддерживает 65536 кодов различных символов. Это могут быть буквы русские, английские, числа, нестандартные символы, пунктуация пробелы, перевод строки и другие.

Строка состоящая из более чем одного символа, является массивом символом. Однако в JavaScript и других ООП языках, String не использует функционал массива, но свой — свойства и функции массивов остаются принадлежат классу Array, строковые классу String. В JavaScript свойства и методы строковых объектов хранятся в String.prototype.

Поиск символа в строке

Ввиду того, что строка является массивом символов, логично представить, что подстроку или символ можно найти по индексу.

Пример: Как выглядит строка с точки зрения интерпретатора

var name = «Josh»;
// Как строка выглядит в памяти
‘J’ ‘o’ ‘s’ ‘h’
[0] [1] [2] [3]

Обратите внимание! Каждый символ заключен в свою ячейку, каждая из которых обладает своим индексом. Первый символ равен нулевому индексу.

Чтобы получить любой из символов строковой переменной, достаточно обратиться к нему через индекс.

Пример:

var name = «Josh»;

alert(name); //Josh
alert(name[0]); // J
alert(name[3]); h

for(var i = 0; i<=2; i++){
alert(name[i]+» «); // J o s
}

В примере выше мы разобрались как получить определенный символ по его индексу. Альтернативой данному варианту выступает функция charAt().

Пример:

var name = «Alan»;
var ch = name.charAt(2); // a

Но что если требуется получить индекс символа? Для этого предусмотрена встроенная функция indexOf(), которая также является частью класса String и хранится в String.prototype.

Функция indexOf() и ее особенности

Функция indexOf() предназначена для поиска индекса символа в строке или положения подстроки относительно начала. Она принимает один из двух возможных параметров — символ или строку. Второй необязательный параметр указывает с какой позиции осуществлять поиск.

В первом случае функция возвращает индекс единого символа. Если передать ей сроку, то функция вернет индекс первого символа. Отсчет поиска начинается с нуля.

Пример:

var carBrand = «Ford is a car brand»;

// Попробуем найти индекс символа d
alert(carBrand.indexOf(«d»)); // 3
// был найден первый символ d

alert(carBrand.indexOf(«brand»)); // 14

Здесь первый вывод нашел позицию первого символа «d». Это случилось потому, что вызов функции осуществился только с одним строковым параметром. Функция indexOf() принимает еще один необязательный параметр типа int, который указывает с какой позиции в основной строке начать поиск.

Пример:

var carBrand = «Ford is a car brand»;

alert(carBrand.indexOf(«d», 5)); //18

Теперь был осуществлен поиск последнего в строке символа «d». Альтернативой для поиска индекса символа находящегося в конце строки выступает функция lastIndexOf();

Пример:

var carBrand = «Ford is a car brand»;

alert(carBrand.lastIndexOf(«d»)); // 18

Найденная позиция последнего в строке символа «d» равна 18. Это потому, что отсчет осуществляется в обратно порядке. То есть — indexOf() ищет с нулевого первого символа, lastIdexOf() ищи в обратно отсчете. Поэтому и был найден именно последний символ «d» первым.

В lastIndexOf() также предусмотрен и второй числовой параметр, указывающий с какой позиции вести поиск. Поэтому можно найти и первый символ «d» в нашей строке.

Итог

Казалось бы, эти две функции полностью аналогичны. Остается вопрос зачем было переполнять язык функцией lastIndexOf(). Однако это только кажется, что обратный отсчет не уместен. Часто ситуация требует выбора между двумя вариантами. В каком-то участке кода практичнее будет использовать indexOf(), в другом случае противоположную функцию — lastIndexOf().

Главное следует запомнить! У этих функций одинаковые параметры, indexOf() осуществляет поиск с начала строки и до конца, lastIndexOf() осуществляет поиск с конца строки. Если искомый символ не был найден, то обе функции возвращают -1.

Оцените статью
Образовательный портал WELCOME4U.RU
Добавить комментарий

Adblock
detector