Объект String (строковый объект) используется для хранения и обработки текстовой информации. Он незаменим, когда требуется, например, найти позицию вхождения одной строки в другую, вырезать из строки подстроку, разбить строку на отдельные символы и создать из них массив и т. д.
Создание строкового объекта
С помощью конструктора String
создается объект, в который «упакована» текстовая строка. Для создания строкового объекта используется выражение следующего вида:
var val = new String(string);
var val = String(string);
Здесь имя переменной (val) выполняет роль ссылки на строковый объект. Аргументом (string) конструктору String
обычно передается текстовое значение (базового типа): любая последовательность Unicode символов, которую необходимо преобразовать в строку.
Однако можно создать строковый объект и с помощью строковых литералов:
var str = "string literal";
Обратите внимание, что JavaScript различает строковые литералы, заданные через кавычки (и называемые "примитивными" строками) от объектов String, созданных с помощью оператора new:
Примечание: Интерпретатор JavaScript неявно использует объект String в качестве объекта обертки, поэтому строковой литерал интерпретируется так, как будто был создан с помощью оператора new, так что на строковых примитивах возможно использовать свойства и методы объекта String.
Свойства String
Свойство length – длина или количество символов (включая пробелы) в строке.
В следующем примере приведены три различных способа использования свойства length строкового объекта:
Свойство prototype (прототип) позволяет добавлять свойства и методы ко всем создаваемым строковым объектам. Данное свойство используется интерпретатором, когда функция используется как конструктор при создании нового объекта. Любой объект, созданный с помощью конструктора, наследует все свойства объекта, на который ссылается свойство prototype.Свойство constructor ссылается на функцию-конструктор, которая была использована при создании объекта:
Доступ к символам
Конкретный символ в строке можно получить с помощью метода charAt(). Он принимает в качестве аргумента целое число, указывающее позицию в строке для символа, который следует возвратить. Ввиду того что в JavaScript нет различия между отдельными символами и строками, метод возвращает строку, состоящую из выбранного символа:
Другим способом (введённым в ECMAScript 5) является рассмотрение строки как массива, в котором символы имеют соответствующие числовые индексы. Для доступа к символу нужно указать его индекс в квадратных скобках:
При доступе к символам через квадратные скобки, попытка удалить символ, или присвоить другое значение числовому индексу в строке закончится неудачей, поскольку эти свойства являются незаписываемыми и ненастраиваемыми.
Вообще содержимое строки в JavaScript нельзя поменять. Можно создать новую строку и присвоить в туже переменную вместо старой, например:
Примечание: Разница между доступом к символам строки посредством нотации с квадратными скобками []
и методом charAt()
заключается в том, что если на месте искомой позиции символа нет – charAt()
выдает пустую строку ''
, а скобки []
– undefined
.
Сравнение строк
В JavaScript для сравнения строк можно использовать операторы меньше и больше:
'abc' > 'ab' // true
'abc' > 'ab' // true
'abc' > 'abc' // false
'abc' >= 'abc' // true
'w' > 'abc' // true
'а' > 'Я' // true
'ё' > 'я' // true
В JavaScript строки сравниваются посимвольно в алфавитном порядке. Сначала сравниваются первые символы строк, затем вторые, третьи... И как только какой-то символ оказывается меньше, строка считается меньше, даже если в строке больше символов. Если у какой-то строки заканчиваются символы, то она считается меньше, а если символы закончились у обоих строк одновременно – они одинаковые.
Но стоит отметить, что строки имеют внутреннюю кодировку Юникод – каждому символу соответствует свой числовой код.
Есть метод для получения символа по его коду String.fromCharCode():
А вот метод charCodeAt() наоборот возвращает числовое значение Unicode символа, индекс которого был передан методу в качестве аргумента:
А теперь давайте выведем интервал символов Unicode с кодами от 1025 до 1105:
Как видите, не все символы в Юникоде соответствуют их месту в алфавите. Есть некоторые исключения. Строчные буквы идут после заглавных, поэтому они всегда больше. А буква 'ё', имеет код, больший чем 'я', поэтому 'ё'(код 1105) > 'я'(код 1103).
Для правильного сравнения строк используйте метод str1.localeCompare(str2), который сравнивает одну строку с другой и возвращает одно из трех значений:
- Если строка str1 должна располагаться по алфавиту перед str2, возвращается -1.
- Если строка str1 равна str2, возвращается 0.
- Если строка str1 должна располагаться по алфавиту после str2, возвращается 1.
Методы String
Метод | Описание |
---|---|
charAt() | Возвращает символ строки с указанным индексом (позицией). |
charCodeAt() | Возвращает числовое значение Unicode символа, индекс которого был передан методу в качестве аргумента. |
concat() | Возвращает строку, содержащую результат объединения двух и более предоставленных строк. |
fromCharCode() | Возвращает строку, созданную с помощью указанной последовательности значений символов Unicode. |
indexOf() | Возвращает позицию первого символа первого вхождения указанной подстроки в строке. |
lastIndexOf() | Возвращает позицию последнего найденного вхождения подстроки или -1, если подстрока не найдена. |
localeCompare() | Возвращает значение, указывающее, эквивалентны ли две строки в текущем языковом стандарте. |
match() | Ищет строку, используя предоставленный шаблон регулярного выражения, и возвращает результат в виде массива. Если совпадений не найдено, метод возвращает значение null. |
replace() | Ищет строку для указанного значения или регулярного выражения и возвращает новую строку, где указанные значения будут заменены. Метод не изменяет строку, для которой он вызывается. |
search() | Возвращает позицию первого соответствия указанной подстроки или регулярного выражения в строке. |
slice() | Позволяет извлечь подстроку из строки. Первый аргумент указывает индекс с которого нужно начать извлечение. Второй необязательный аргумент указывает позицию, на которой должно остановиться извлечение. Если второй аргумент не указан, то извлечено будет все с той позиции, которую указывает первый аргумент, и до конца строки. |
split() | Разбивает строку на подстроки, возвращая массив подстрок. В качестве аргумента можно передать символ разделитель (например запятую), используемый для разбора строки на подстроки. |
substr() | Позволяет извлечь подстроку из строки. Первый аргумент указывает индекс с которого нужно начать извлечение. Второй аргумент указывает количество символов, которое нужно извлечь. |
substring() | Извлекает символы из строки между двух указанных индексов, если указан только один аргумент, то извлекаются символы от первого индекса и до конца строки. |
toLocaleLowerCase() | Преобразует символы строки в нижний регистр с учетом текущего языкового стандарта. |
toLocaleUpperCase() | Преобразует символы строки в верхний регистр с учетом текущего языкового стандарта. |
toLowerCase() | Конвертирует все символы строки в нижний регистр и возвращает измененную строку. |
toString() | Возвращает строковое представление объекта. |
toUpperCase() | Конвертирует все символы строки в верхний регистр и возвращает измененную строку. |
trim() | Удаляет пробелы в начале и конце строки и возвращает измененную строку. |
valueOf() | Возвращает примитивное значение объекта. |
Задачи
-
Создать из числа массив чисел
Дано число num. Запишите каждую цифру этого числа в отдельный элемент массива arr.
var num = 12345; // Ваш код document.writeln(arr); // [1,2,3,4,5]
Решение:
Так как метод split применяется только к строкам, а у нас число, преобразуем вначале число к строке с помощью функции String, а затем к строке применим split:
-
Является ли строка палиндромом
- Напишите функцию, которая принимает в качестве аргумента строку.
- Удаляет из строки последовательности любых пробельных символов.
- Игнорирует регистр символов.
- И, наконец, определяет, является ли строка палиндромом (перевертышем), т.е. одинаково пишется как с начала, так и с конца.
Для решения задачи вам понадобится шаблон регулярного выражения для удаления пробельных символов (\s+).
var str = "abC \t dS\r sD\n cBA"; function palindrome(str) { // ваш код } palindrome(str); // 'это палиндром'
-
Заглавные символы
Напишите функцию, которая преобразует первую букву каждого слова строки str в верхний регистр.
var str = "быстрей проносятся года"; function firstLetter(str) { // ваш код } firstLetter(str); // Быстрей Проносятся Года
-
Обрезаем длинную строку...
Дана строка str, в которой хранится длинный текст. Реализуйте обрезание строки по следующему принципу: если количество символов в строке больше заданного max, то в переменную result запишите первые max символов строки str и добавьте в конец троеточие '...'. Если количество символов в строке меньше или равно заданного max, в переменную result запишите содержимое переменной str как есть.
var str = 'и катишься как снежный ком'; var max = 10; // ваш код // и катишься...
-
-
Комментарии
<code>
, несколько строчек кода — в теги<pre><code>
...ваш код...</code></pre>
.