JavaScript с нуля - [32]

Шрифт
Интервал

Свойства и методы строк

Когда мы работаем со строками, то реализация объекта String предполагает множество свойств, обычно упрощающих работу с текстом. В последующих разделах вместо скучного изучения каждого из этих свойств я сфокусируюсь на наиболее важных, которые будут актуальны в контексте ваших задач.

Обращение к отдельным символам

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

let vowels = "aeiou";

console.log(vowels[2]);

В этом примере мы увидим знак i, так как именно этот элемент находится под индексом 2. Для наглядного представления происходящего рассмотрите рис. 14.2.

Рис. 14.2. Гласные отображены в виде индексов

Когда дело касается индекса, стоит помнить, что его позиция в JavaScript начинается с 0. Именно поэтому позиция нашего индекса 2, но порядковый номер действительной позиции элемента — 3. Вы к этому привыкнете в процессе работы с JavaScript и прочими языками, в чьих названиях не содержатся слова Visual и Basic, что подразумевало бы начало отсчета индексов с 1.

Переходим далее. Мы можем обращаться ко всем знакам строки с помощью цикла, перебирающего их индексы. Началом цикла будет 0, а завершение будет определяться длиной самой строки. Длина (то есть количество знаков) возвращается свойством length.

Рассмотрим это на примере из предыдущего раздела:

let vowels = "aeiou";


for (let i = 0; i < vowels.length; i++) {

console.log(vowels[i]);

}

Несмотря на то что мы можем редко использовать циклы для строк, достаточно распространено использование свойства length для получения числа знаков строки.

Также существует альтернатива массиво-скобочной нотации, известная как метод charAt. Он возвращает знак согласно определенному индексу:

let vowels = "aeiou";

console.log(vowels.charAt(2));

В итоге мы получаем то же, что и в случае с описанной ранее массивоподобной нотацией. Я бы рекомендовал использовать этот метод, только если вы работаете для устаревших версий браузеров вроде Internet Explorer 7.

Погодите, что?!

Если вам интересно, где строковые примитивы имеют возможность обратиться к свойствам, доступным только для строковых объектов, потерпите до следующей главы. Там мы рассмотрим это более подробно.

Совмещение (конкатенация) строк

Для совмещения двух строк мы можем просто использовать операторы + или +=, складывая их как обычный набор чисел:

let stringA = "I am a simple string.";

let stringB = "I am a simple string, too!";


console.log(stringA + " " + stringB);

Обратите внимание, что в третьей строке мы складываем stringA со stringB. Между ними мы определяем пустое пространство (" "), чтобы обеспечить разделяющий их пробел. Вы можете смешивать и сопоставлять строчные литералы со строчными примитивами и строчными объектами, получая при этом все тот же совмещенный текст.

К примеру, вот рабочий вариант:

let textA = "Please";

let textB = new String("stop!");

let combined = textA + " make it " + textB;


console.log(combined);

Несмотря на все это смешение, тип переменной combined будет простым строчным примитивом.

Для совмещения строк мы также можем использовать метод concat. Его можно вызывать из любой строки, определив порядок строчных примитивов, литералов и объектов, которые мы хотим склеить в единую мегастроку:

let foo = "I really";

let blah = "why anybody would";

let blarg = "do this";


let result = foo.concat(" don't know", " ", blah, " ", blarg);


console.log(result);

В большинстве случаев для этой цели можете просто использовать подход с + и +=. Он быстрее, чем метод concat. А если нет разницы, то почему бы не повысить скорость кода?

Получение подстрок из строк

Иногда мы заинтересованы в определенном отрезке знаков отдельной части строки. Для удовлетворения такого интереса служат два метода — slice и substr. Предположим, у нас есть следующая строка:

let theBigString = "Pulp Fiction is an awesome movie!";

Давайте с ней немного поработаем.

Метод slice

Метод slice позволяет нам определять начальную и конечную позиции интересующей части строки, которую мы хотим извлечь:

let theBigString = "Pulp Fiction is an awesome movie!";

console.log(theBigString.slice(5, 12));

В этом примере мы извлекаем знаки между индексами 5 и 12. В итоге будет возвращено слово Fiction.

Значения начальной и конечной позиций не обязательно должны быть положительными. Если вы определите отрицательное значение конечной точки, то она будет вычислена обратным отсчетом от конца строки:

let theBigString = "Pulp Fiction is an awesome movie!";

console.log(theBigString.slice(0, -6));

То же касается и определения начальной точки, которая при отрицательном значении вычисляется также с конца строки:

let theBigString = "Pulp Fiction is an awesome movie!";

console.log(theBigString.slice(-14, -7));

Мы только что рассмотрели три варианта использования метода slice. Я всегда использовал только первый способ с положительными значениями начала и конца нужного отрезка, и вы, вероятно, последуете тем же путем.


Рекомендуем почитать
Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.


Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.


MFC и OpenGL

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Симуляция частичной специализации

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Обработка событий в С++

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.