Длина строки
Свойство length
содержит длину строки:
alert( `My\n`.length ); // 3
Обратите внимание, \n
— это один спецсимвол, поэтому тут всё правильно: длина строки 3
.length
— это свойство
Бывает так, что люди с практикой в других языках случайно пытаются вызвать его, добавляя круглые скобки: они пишут str.length()
вместо str.length
. Это не работает.
Так как str.length
— это числовое свойство, а не функция, добавлять скобки не нужно.
Доступ к символам
Получить символ, который занимает позицию pos
, можно с помощью квадратных скобок: [pos]
. Также можно использовать метод charAt
: str.charAt(pos). Первый символ занимает нулевую позицию:
let str = `Hello`;
// получаем первый символ
alert( str[0] ); // H
alert( str.charAt(0) ); // H
// получаем последний символ
alert( str[str.length - 1] ); // o
Квадратные скобки — современный способ получить символ, в то время как charAt
существует в основном по историческим причинам.
Разница только в том, что если символ с такой позицией отсутствует, тогда []
вернёт undefined
, а charAt
— пустую строку:
let str = `Hello`;
alert( str[1000] ); // undefined
alert( str.charAt(1000) ); // '' (пустая строка)
Также можно перебрать строку посимвольно, используя for..of
:
for (let char of "Hello") {
alert(char); // H,e,l,l,o (char — сначала "H", потом "e", потом "l" и т. д.)
}
Строки неизменяемы
Содержимое строки в JavaScript нельзя изменить. Нельзя взять символ посередине и заменить его. Как только строка создана — она такая навсегда.
Давайте попробуем так сделать, и убедимся, что это не работает:
let str = 'Hi';
str[0] = 'h'; // ошибка
alert( str[0] ); // не работает
Можно создать новую строку и записать её в ту же самую переменную вместо старой.
Например:
let str = 'Hi';
str = 'h' + str[1]; // заменяем строку
alert( str ); // hi
В последующих разделах мы увидим больше примеров.
Изменение регистра
Методы toLowerCase() и toUpperCase() меняют регистр символов:
alert( 'Interface'.toUpperCase() ); // INTERFACE
alert( 'Interface'.toLowerCase() ); // interface
Если мы захотим перевести в нижний регистр какой-то конкретный символ:
alert( 'Interface'[0].toLowerCase() ); // 'i'