/
Программирование
/
Курс JavaScript
/

Извлечение символов из строки

JavaScript: Извлечение символов из строки

Иногда нужно получить один символ из строки. Например, если сайт знает имя и фамилию пользователя и нужно вывести их в сокращённом формате вида A. Ivanov. Для этого потребуется взять первую букву имени.

В JavaScript для доступа к символам строки используют индексацию. Индексация означает, что у каждого символа в строке есть свой номер, то есть индекс. Индексация начинается с нуля: у первого символа индекс 0, у второго 1 и так далее. Представим, что у нас есть строка:

const firstName = 'Alexander';

Чтобы получить первую букву, указываем её позицию (индекс) в квадратных скобках:

console.log(firstName[0]); // => A

Индексы в JavaScript (и во многих языках) начинаются с нуля:

Символ  A  l  e  x  a  n  d  e  r
Индекс  0  1  2  3  4  5  6  7  8

Длина строки Alexander равна 9, поэтому индекс последнего символа равен 8, то есть 9 - 1. Длину строки можно узнать с помощью функции length():

import { length } from 'hexlet-basics/string';

console.log(length(firstName));               // => 9
console.log(firstName[length(firstName) - 1]); // => r

Строка import в начале файла подключает учебную функцию length() из библиотеки — её нужно просто скопировать как есть. Как устроены импорты, разберём в уроках про модули.

Если изменится длина строки, то последний символ тоже сдвинется, и придётся снова вычислять его индекс.

Выход за границы строки

В отличие от некоторых языков, в JavaScript обращение к несуществующему индексу не вызывает ошибку — возвращается специальное значение undefined. Это «ничего нет» в мире JavaScript; подробно разберём его в модуле про типы данных.

console.log(firstName[9]); // => undefined

Поэтому в программировании принято проверять длину строки и обращаться к её символам, только если это безопасно. Мы дойдём до этого в будущих уроках.

Извлечение символов с конца

В некоторых языках (например, в Python) для доступа к символам с конца используют отрицательные индексы. В JavaScript квадратные скобки отрицательные индексы не понимают — firstName[-1] вернёт undefined. Поэтому индекс символа с конца вычисляют через длину строки:

import { length } from 'hexlet-basics/string';

const word = 'Hexlet';

console.log(word[length(word) - 1]); // => t, последний символ
console.log(word[length(word) - 2]); // => e, предпоследний символ
Строка:  'H' 'e' 'x' 'l' 'e' 't'
Индекс:   0   1   2   3   4   5

Здесь length(word) равно 6, поэтому последний символ имеет индекс length(word) - 1, то есть 5. Такой подход работает правильно даже если строка меняет длину.

Индекс можно хранить в переменной:

const index = 0;
console.log(word[index]); // => H

Такой подход полезен, когда индекс вычисляется где-то в коде, а потом используется для доступа к нужному символу.

Спецсимволы

При индексации учитываются обычные буквы, знаки и спецсимволы. Все они занимают позицию в строке и имеют свой индекс, даже если их «не видно» на экране.

Например, в строке '\nyou' первый символ представляет собой \n (перенос строки), а под индексом 1 уже идёт буква y. Поэтому обращение magic[1] вернёт именно y.

Подумайте: что выведет этот код?

const magic = '\nyou';
console.log(magic[1]); // => ?

Вывод будет:

y

Задание

В строке text спрятано секретное слово. Извлеките нужные символы из переменной text по индексам, соедините их и выведите на экран слово grip.

Полезное

Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются