Объект 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.

Свойство 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.

МетодОписание
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:

    Выполнить код »
  • Является ли строка палиндромом

    1. Напишите функцию, которая принимает в качестве аргумента строку.
    2. Удаляет из строки последовательности любых пробельных символов.
    3. Игнорирует регистр символов.
    4. ­­
    5. И, наконец, определяет, является ли строка палиндромом (перевертышем), т.е. одинаково пишется как с начала, так и с конца.

    Для решения задачи вам понадобится шаблон регулярного выражения для удаления пробельных символов (\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>.
  • Допускаются ссылки на онлайн-песочницы (codepen, plnkr, JSBin и др.).