Что такое string в javascript
String
Объект String используется, чтобы представить и конструировать последовательность символов.
Синтаксис
Строковые литералы могут быть следующих форм:
Кроме регулярных печатных символов можно использовать специальные символы, которые можно закодировать, используя нотацию escape-последовательностей:
Код | Вывод |
---|---|
\0 | нулевой символ (символ NUL) |
\’ | одинарная кавычка |
\» | двойная кавычка |
\\ | обратный слеш |
\n | новая строка |
\r | возврат каретки |
\v | вертикальная табуляция |
\t | табуляция |
\b | забой |
\f | подача страницы |
\uXXXX | Юникод-символ |
\xXX | символ в кодировке Latin-1 |
Либо можно использовать глобальный объект String напрямую:
Параметры
Описание
Доступ к символам
Существует два способа добраться до конкретного символа в строке. В первом способе используется метод charAt() :
Другим способом (введённым в ECMAScript 5) является рассмотрение строки как массивоподобного объекта, в котором символы имеют соответствующие числовые индексы:
При доступе к символам посредством нотации с квадратными скобками, попытка удалить символ, или присвоить значение числовому свойству закончится неудачей, поскольку эти свойства являются незаписываемыми и ненастраиваемыми. Смотрите документацию по методу Object.defineProperty() для дополнительной информации.
Сравнение строк
Разница между строковыми примитивами и объектами String
Обратите внимание, что JavaScript различает объекты String и значения строкового примитива (то же самое верно и для объектов Boolean и Number ).
Строки
В JavaScript любые текстовые данные являются строками. Не существует отдельного типа «символ», который есть в ряде других языков.
Внутренний формат для строк — всегда UTF-16, вне зависимости от кодировки страницы.
Кавычки
В JavaScript есть разные типы кавычек.
Строку можно создать с помощью одинарных, двойных либо обратных кавычек:
Ещё одно преимущество обратных кавычек — они могут занимать более одной строки, вот так:
Выглядит вполне естественно, не правда ли? Что тут такого? Но если попытаться использовать точно так же одинарные или двойные кавычки, то будет ошибка:
Одинарные и двойные кавычки в языке с незапамятных времён: тогда потребность в многострочных строках не учитывалась. Что касается обратных кавычек, они появились существенно позже, и поэтому они гибче.
Спецсимволы
Многострочные строки также можно создавать с помощью одинарных и двойных кавычек, используя так называемый «символ перевода строки», который записывается как \n :
В частности, эти две строки эквивалентны, просто записаны по-разному:
Есть и другие, реже используемые спецсимволы. Вот список:
Примеры с Юникодом:
Все спецсимволы начинаются с обратного слеша, \ — так называемого «символа экранирования».
Он также используется, если необходимо вставить в строку кавычку.
Здесь перед входящей в строку кавычкой необходимо добавить обратный слеш — \’ — иначе она бы обозначала окончание строки.
Разумеется, требование экранировать относится только к таким же кавычкам, как те, в которые заключена строка. Так что мы можем применить и более элегантное решение, использовав для этой строки двойные или обратные кавычки:
Это можно сделать, добавив перед ним… ещё один обратный слеш!
JavaScript объект String
Объект String позволяет манипулировать и форматировать строки текста и выполнять поиск подстрок в строках.
Параметры:
Помимо обычных символов JavaScript предоставляет возможность вводить в строку специальные символы, которые нельзя ввести напрямую с клавиатуры, для этого используются управляющие последовательности (escape sequences) :
Код | Символ |
---|---|
\0 | ноль |
\’ | одиночная кавычка (апостроф) |
\» | двойная кавычка |
\\ | обратный слэш |
\n | новая строка |
\r | возвращение каретки |
\v | вертикальный tab |
\t | tab |
\b | backspace |
\f | смена страницы |
\uXXXX | Unicode символ, указанный с помощью шестнадцатеричного числа XXXX |
\xXX | символ Latin-1 |
Строковой литерал
Строкой литерал имеет ноль или более символов, заключенных в одиночные или двойные кавычки. Все строковые литералы имеет примитивный строковой тип данных. Объект String создается с помощью оператора new и, в отличие от строковых литералов, имеет тип данных объект:
Примечание: при вызове любого метода для строкового литерала, интерпретатор JavaScript неявно использует объект String в качестве объекта обертки, поэтому строковой литерал интерпретируется так, как будто был создан с помощью оператора new.
Методы
Объект String
Курс: Основы HTML и CSS
Курс: Разработка на C#
Курс: Python-разработчик с нуля
Осваивайте профессию, начните зарабатывать, а платите через год!
Курсы Python Акция! Бесплатно!
Станьте хакером на Python за 3 дня
Веб-вёрстка. CSS, HTML и JavaScript
Станьте веб-разработчиком с нуля
Объект String (строковый объект) используется для хранения и обработки текстовой информации. Он незаменим, когда требуется, например, найти позицию вхождения одной строки в другую, вырезать из строки подстроку, разбить строку на отдельные символы и создать из них массив и т. д.
Создание строкового объекта
С помощью конструктора String создается объект, в который «упакована» текстовая строка. Для создания строкового объекта используется выражение следующего вида:
Здесь имя переменной (val) выполняет роль ссылки на строковый объект. Аргументом (string) конструктору String обычно передается текстовое значение (базового типа): любая последовательность Unicode символов, которую необходимо преобразовать в строку.
Однако можно создать строковый объект и с помощью строковых литералов:
Обратите внимание, что JavaScript различает строковые литералы, заданные через кавычки (и называемые «примитивными» строками) от объектов String, созданных с помощью оператора new:
Свойства String
Свойство length – длина или количество символов (включая пробелы) в строке.
В следующем примере приведены три различных способа использования свойства length строкового объекта:
Свойство constructor ссылается на функцию-конструктор, которая была использована при создании объекта:
Доступ к символам
Конкретный символ в строке можно получить с помощью метода charAt(). Он принимает в качестве аргумента целое число, указывающее позицию в строке для символа, который следует возвратить. Ввиду того что в JavaScript нет различия между отдельными символами и строками, метод возвращает строку, состоящую из выбранного символа:
Другим способом (введённым в ECMAScript 5) является рассмотрение строки как массива, в котором символы имеют соответствующие числовые индексы. Для доступа к символу нужно указать его индекс в квадратных скобках:
При доступе к символам через квадратные скобки, попытка удалить символ, или присвоить другое значение числовому индексу в строке закончится неудачей, поскольку эти свойства являются незаписываемыми и ненастраиваемыми.
Вообще содержимое строки в JavaScript нельзя поменять. Можно создать новую строку и присвоить в туже переменную вместо старой, например:
Сравнение строк
В JavaScript для сравнения строк можно использовать операторы меньше и больше:
В JavaScript строки сравниваются посимвольно в алфавитном порядке. Сначала сравниваются первые символы строк, затем вторые, третьи. И как только какой-то символ оказывается меньше, строка считается меньше, даже если в строке больше символов. Если у какой-то строки заканчиваются символы, то она считается меньше, а если символы закончились у обоих строк одновременно – они одинаковые.
Но стоит отметить, что строки имеют внутреннюю кодировку Юникод – каждому символу соответствует свой числовой код.
Есть метод для получения символа по его коду String.fromCharCode():
А вот метод charCodeAt() наоборот возвращает числовое значение Unicode символа, индекс которого был передан методу в качестве аргумента:
А теперь давайте выведем интервал символов Unicode с кодами от 1025 до 1105:
Как видите, не все символы в Юникоде соответствуют их месту в алфавите. Есть некоторые исключения. Строчные буквы идут после заглавных, поэтому они всегда больше. А буква ‘ё’, имеет код, больший чем ‘я’, поэтому ‘ё’(код 1105) > ‘я’(код 1103).
Методы String
Создать из числа массив чисел
Дано число num. Запишите каждую цифру этого числа в отдельный элемент массива arr.
Так как метод split применяется только к строкам, а у нас число, преобразуем вначале число к строке с помощью функции String, а затем к строке применим split:
Строки
Материал на этой странице устарел, поэтому скрыт из оглавления сайта.
Есть ряд улучшений и новых методов для строк.
Начнём с, пожалуй, самого важного.
Строки-шаблоны
Добавлен новый вид кавычек для строк:
Основные отличия от двойных «…» и одинарных ‘…’ кавычек:
В них разрешён перевод строки.
Заметим, что пробелы и, собственно, перевод строки также входят в строку, и будут выведены.
Функции шаблонизации
Можно использовать свою функцию шаблонизации для строк.
Название этой функции ставится перед первой обратной кавычкой:
В примере выше видно, что строка разбивается по очереди на части: «кусок строки» – «параметр» – «кусок строки» – «параметр».
То есть, если в строке находится \n или \u1234 или другое особое сочетание символов, то оно таким и останется.
Это нужно в тех случаях, когда функция шаблонизации хочет произвести обработку полностью самостоятельно (свои спец. символы?). Или же когда обработка спец. символов не нужна – например, строка содержит «обычный текст», набранный непрограммистом без учёта спец. символов.
Как видно, функция имеет доступ ко всему: к выражениям, к участкам текста и даже, через strings.raw – к оригинально введённому тексту без учёта стандартных спец. символов.
Функция шаблонизации может как-то преобразовать строку и вернуть новый результат.
В простейшем случае можно просто «склеить» полученные фрагменты в строку:
Функция str в примере выше делает то же самое, что обычные обратные кавычки. Но, конечно, можно пойти намного дальше. Например, генерировать из HTML-строки DOM-узлы (функции шаблонизации не обязательно возвращать именно строку).
Или можно реализовать интернационализацию. В примере ниже функция i18n осуществляет перевод строки.
Итоговое использование выглядит довольно красиво, не правда ли?
Разумеется, эту функцию можно улучшить и расширить. Функция шаблонизации – это своего рода «стандартный синтаксический сахар» для упрощения форматирования и парсинга строк.
Улучшена поддержка юникода
Внутренняя кодировка строк в JavaScript – это UTF-16, то есть под каждый символ отводится ровно два байта.
Но под всевозможные символы всех языков мира 2 байт не хватает. Поэтому бывает так, что одному символу языка соответствует два юникодных символа (итого 4 байта). Такое сочетание называют «суррогатной парой».
Самый частый пример суррогатной пары, который можно встретить в литературе – это китайские иероглифы.
Заметим, однако, что не всякий китайский иероглиф – суррогатная пара. Существенная часть «основного» юникод-диапазона как раз отдана под китайский язык, поэтому некоторые иероглифы – которые в неё «влезли» – представляются одним юникод-символом, а те, которые не поместились (реже используемые) – двумя.
Китайскими иероглифами суррогатные пары, естественно, не ограничиваются.
Ими представлены редкие математические символы, а также некоторые символы для эмоций, к примеру:
Например, charCodeAt считает суррогатную пару двумя разными символами и возвращает код каждой:
…В то время как codePointAt возвращает его Unicode-код суррогатной пары правильно:
Более старый метод fromCharCode в последней строке дал неверный результат, так как он берёт только первые два байта от числа 119987 и создаёт символ из них, а остальные отбрасывает.
Есть и ещё синтаксическое улучшение для больших Unicode-кодов.
В JavaScript-строках давно можно вставлять символы по Unicode-коду, вот так:
«Лишние» цифры уже не войдут в код, например:
Чтобы вводить более длинные коды символов, добавили запись \u
Unicode-нормализация
Во многих языках есть символы, которые получаются как сочетание основного символа и какого-то значка над ним или под ним.
Для генерации произвольных сочетаний используются несколько юникодных символов: основа и один или несколько значков.
Если нужен ещё значок над той же буквой (или под ней) – без проблем. Просто добавляем соответствующий символ.
Пример этого символа в JavaScript-строке:
Такая возможность добавить произвольной букве нужные значки, с одной стороны, необходима, а с другой стороны – возникает проблемка: можно представить одинаковый с точки зрения визуального отображения и интерпретации символ – разными сочетаниями Unicode-кодов.
В первой строке после основы S идёт сначала значок «верхняя точка», а потом – нижняя, во второй – наоборот. По кодам строки не равны друг другу. Но символ задают один и тот же.
С целью разрешить эту ситуацию, существует юникодная нормализация, при которой строки приводятся к единому, «нормальному», виду.
В современном JavaScript это делает метод str.normalize().
Забавно, что в данной конкретной ситуации normalize() приведёт последовательность из трёх символов к одному: \u1e68 (S с двумя точками).
Это, конечно, не всегда так, просто в данном случае оказалось, что именно такой символ в юникоде уже есть. Если добавить значков, то нормализация уже даст несколько символов.
Для большинства практических задач информации, данной выше, должно быть вполне достаточно, но если хочется более подробно ознакомиться с вариантами и правилами нормализации – они описаны в приложении к стандарту юникод Unicode Normalization Forms.
Полезные методы
Добавлен ряд полезных методов общего назначения:
Конечно, всё это можно было сделать при помощи других встроенных методов, но новые методы более удобны.