Кратко
Секция статьи "Кратко"Любые текстовые данные в JavaScript — это строки (string). Строки представляют собой последовательность символов. Созданная строка является иммутабельной (immutable) и не может быть изменена.
Как пишется
Секция статьи "Как пишется"Есть несколько способов создать строку:
- одинарными кавычками
'
; - двойными кавычками
"
; - шаблонной строкой через обратный апостроф
`
.
Записи одинарными и двойными кавычками идентичны:
const double = "Окна были распахнуты настежь, и булыжник мостовой просыхал после дождя."const single = 'Солнце высушивало мокрые лица домов напротив моего окна'
const double = "Окна были распахнуты настежь, и булыжник мостовой просыхал после дождя." const single = 'Солнце высушивало мокрые лица домов напротив моего окна'
Можно создать пустую строку или строку из пробелов:
const empty = ''const spaces = ' '
const empty = '' const spaces = ' '
Если в записи одинарными кавычками нужно поставить апостроф, то символ экранируют обратным слэшем
. Так мы даём JavaScript понять, что это просто символ, а не закрывающая кавычка:
const who = 'I\'m a good person.'
const who = 'I\'m a good person.'
Шаблонные строки позволяют подставлять в строку значения переменных. Между обратными апострофами пишется текст, а в местах, где нужно вставить значение из переменной используется синтаксис ${имя
:
const product = 'Штаны'const qty = 1console.log(`Набор программиста: ${product}, ${qty}шт.`)// Набор программиста: Штаны, 1шт.
const product = 'Штаны' const qty = 1 console.log(`Набор программиста: ${product}, ${qty}шт.`) // Набор программиста: Штаны, 1шт.
Детальное описание работы с шаблонными строками, читайте в статье «Шаблонные строки».
Как это понять
Секция статьи "Как это понять"Строка сложно устроена внутри, несмотря на то, что это примитив. Визуально текст представляет собой последовательность символов, но как компьютер хранит эти символы?
Символ, который видно на экране хранится в компьютере как одно или несколько чисел, каждое такое число называют юнитом. Компьютер хранит таблицу в которой числу соответствует символ. Такие таблицы называют кодировкой.
В JavaScript используется кодировка UTF-16, самая распространённая в мире. Таблица этой кодировки настолько большая, что покрывает не только все современные алфавиты и иероглифические системы записи, но и шумерскую клинопись, и древнеегипетские иероглифы. Эмодзи тоже содержатся в этой таблице, поэтому нам не нужно ничего устанавливать на компьютер чтобы видеть их 🙌
Отдельный символ строки можно получить по порядковому номеру символа в строке, он начинается с 0:
const greeting = 'Привет!'console.log(greeting[0])// Пconsole.log(greeting[3])// в
const greeting = 'Привет!' console.log(greeting[0]) // П console.log(greeting[3]) // в
Операции со строками
Секция статьи "Операции со строками"Для строк определена операция сложения, её также называют конкатенацией строк. При сложении двух строк получается новая строка, склеенная из исходных:
const desire = 'Я хочу'const food = 'пельменей'const bad = desire + foodconsole.log(bad)// Я хочупельменейconst good = desire + ' ' + foodconsole.log(good)// Я хочу пельменей
const desire = 'Я хочу' const food = 'пельменей' const bad = desire + food console.log(bad) // Я хочупельменей const good = desire + ' ' + food console.log(good) // Я хочу пельменей
Строки можно сравнивать между собой, для сравнения используется лексикографический порядок. Это означает, что первые символы алфавита считаются меньше последних.
Алгоритм посимвольно сравнивает строки до первого несовпадения, либо пока не закончится одна из строк. Например, для произвольных строк s1
и s2
:
- Сравниваются символы
s1
и[ 0 ] s2
. Если символы разные, то большей будет та строка, символ которой больше. Сравнение завершено.[ 0 ] - Если первые символы совпали, аналогично проверяем вторые символы. Продолжаем, пока не найдём несовпадение или не закончится одна из строк.
- Если строки закончились одновременно, то они равны. Если закончилась одна из строк, то большей строкой считается строка с большим количеством символов.
console.log('А' > 'Я')// falseconsole.log('Кот' > 'Код')// trueconsole.log('Код' > 'Кодер')// falseconsole.log('Код' === 'Код')// true
console.log('А' > 'Я') // false console.log('Кот' > 'Код') // true console.log('Код' > 'Кодер') // false console.log('Код' === 'Код') // true
Сравнение учитывает регистр букв, если необходимо регистронезависимое сравнение, то обе строки приводятся к верхнему или нижнему регистру с помощью методов toUpperCase
или toLowerCase
:
const capitalized = 'Арбуз'const lowercased = 'арбуз'console.log(capitalized === lowercased)// falseconsole.log(capitalized.toLowerCase() === lowercased.toLowerCase())// true
const capitalized = 'Арбуз' const lowercased = 'арбуз' console.log(capitalized === lowercased) // false console.log(capitalized.toLowerCase() === lowercased.toLowerCase()) // true
Специальные символы
Секция статьи "Специальные символы"Когда компьютеры только появились, главным способом взаимодействия с компьютером был текст. Неформатированный текст сложно воспринимать, поэтому появились специальные символы, которые обозначали различные операции, которые нужно сделать с текстом при выводе на экран.
На сегодняшний день актуальными остаются два таких символа:
— начало новой строки;\ n
— табуляция, аналогично нажатию кнопки Tab.\ t
Если эти символы есть в строке, то при печати на экран будет выполнено указанной действие:
const phrase = 'Мы —\n\tЭдисоны\n\t\tневиданных взлётов,\n\t\t\tэнергий\n\t\t\t\tи светов.'console.log(phrase)// Мы —// Эдисоны// невиданных взлётов,// энергий// и светов.
const phrase = 'Мы —\n\tЭдисоны\n\t\tневиданных взлётов,\n\t\t\tэнергий\n\t\t\t\tи светов.' console.log(phrase) // Мы — // Эдисоны // невиданных взлётов, // энергий // и светов.
Длина строки
Секция статьи "Длина строки"Часто используемая операция над строкой — получение её длины:
const str = "Строка текста неизвестной длины"console.log(str.length) // 31
const str = "Строка текста неизвестной длины" console.log(str.length) // 31
Эта операция может вернуть неверное количество символов в строке в тех случаях, когда используются эмодзи. Такой пример рассмотрен в статье о свойстве length
строки.
Дополнительные методы
Секция статьи "Дополнительные методы"Сам по себе примитивный тип «строка» не имеет методов. Когда происходит вызов метода, оно автоматически оборачивается в специальную обёртку, которая и содержит методы:
const lowercased = 'арбуз'console.log(lowercased.toUpperCase())// АРБУЗ
const lowercased = 'арбуз' console.log(lowercased.toUpperCase()) // АРБУЗ
Методы обёртки часто используются, они подробно описаны в отдельной статье.