Что такое строка в программировании — и почему «5» и 5 не одно и то же

Открой консоль браузера и напиши "2" + "2". Ответ будет "22". Не четыре. Компьютер не ошибся — он просто склеил два кусочка текста.
Вот и вся загадка строк: для программы 5 и "5" — разные вещи. Одно — число, с ним можно считать. Другое — текст, который выглядит как число. Разница в двух кавычках, а ломает она половину программ новичков.
Что такое строка
Строка (по-английски string) — это текст внутри программы. Любой: имя, пароль, адрес, сообщение в чате, даже одна буква. Признак простой: строка стоит в кавычках.
const name = "Аня"
const city = 'Алматы'
const greeting = `Привет, ${name}!` // обратные кавычки умеют вставлять переменные
Слово «строка» пошло от английского string of characters — «нитка символов». Представь бусы: каждая бусина — одна буква, а нитка держит их по порядку. Буквы можно пересчитать, взять первую, отрезать кусок.
"Привет".length // 6 — шесть бусин
"Привет"[0] // "П" — первая бусина, счёт идёт с нуля
Строку хранят в переменной, как и всё остальное. Просто в этой коробке лежит текст, а не число.
Почему «5» и 5 — разные вещи
Кавычки меняют смысл. Число 5 программа складывает, умножает, сравнивает по величине. Строку "5" она видит как картинку из одного символа.
5 + 2 // 7
"5" + 2 // "52" — число приклеилось к тексту
"5" - 2 // 3 — а тут JavaScript вдруг решил посчитать
Последняя строчка — ловушка JavaScript. Минус у текста не бывает, поэтому язык молча превращает "5" в число. А плюс для текста бывает — это склейка. Одинаково выглядящий код ведёт себя по-разному.
Ещё хитрость: строки сравниваются по буквам, а не по величине. "10" < "9" даёт true — ведь символ «1» идёт раньше «9». Поэтому список цен, записанных текстом, сортируется как попало: 1, 10, 9.
Где строки подкрадываются незаметно
Главное правило, которое сэкономит тебе часы отладки: всё, что пришло снаружи, почти всегда строка.
- Поле формы. Даже
<input type="number">отдаёт значение текстом. Пользователь ввёл 3 — в коде лежит"3". - Адресная строка. В
?page=2двойка — это"2". - localStorage. Браузер хранит там только текст. Положил число — достанешь строку.
- Файлы и CSV. Таблица, которую ты загрузил, — это строки, пока ты сам не скажешь иначе.
Поэтому классическая жалоба «корзина считает сумму неправильно» часто означает одно: цены пришли строками, и 100 + "200" превратилось в "100200". Как это чинить — разобрали в статье как превратить строку в число.
А вот JSON — приятное исключение. Там у чисел нет кавычек, и после разбора они приходят числами. Если, конечно, сервер не прислал "price": "200".
Сюрприз с эмодзи
Проверь сам: "👍".length вернёт 2. Один значок — два «символа». А семейство "👨👩👧" потянет на восемь.
Дело в том, как JavaScript хранит текст. Большинство букв влезают в одну ячейку, а эмодзи — в две. Сложные эмодзи склеены из нескольких штук. Для кириллицы можно не волноваться: "Привет".length честно даёт 6.
Где это стреляет на практике:
- лимит символов. Ты ограничил подпись 20 символами, а пользователь с эмодзи упирается в лимит раньше;
- обрезка текста. Режешь строку по длине — и эмодзи разваливается пополам на странный квадратик.
Если твоё приложение про сообщения или подписи — попроси ИИ считать длину через [...text].length. Так эмодзи считается за один.
Что со строкой можно делать
У строк есть готовые команды — методы, которые вызываются через точку. В коде от ИИ ты увидишь их постоянно:
" аня ".trim() // "аня" — убрать пробелы по краям
"аня".toUpperCase() // "АНЯ"
"a,b,c".split(",") // ["a", "b", "c"] — порезать в массив
"Привет".includes("вет") // true — есть ли кусок внутри
"кот".replace("к", "р") // "рот"
Одна важная деталь: строку нельзя изменить на месте. Все эти команды возвращают новую строку, а старая остаётся как была. Написал name.trim() и не сохранил результат — пробелы никуда не делись.
split особенно полезен: он превращает текст в массив. Так из строки «яблоки, груши, сливы» получается список, по которому можно пройтись циклом.
Чем одинарные кавычки отличаются от двойных?
В JavaScript — ничем, это вопрос вкуса. Обратные кавычки ` особенные: внутри них можно вставлять переменные через ${...} и переносить строки.
Пустая строка — это то же самое, что null?
Нет. "" — это текст, в котором ноль букв. null — отсутствие значения вообще. Поле формы, которое не заполнили, обычно приходит пустой строкой, а не null.
Как понять, строка у меня или число?
Напиши в коде console.log(typeof price). Ответ "string" — значит, текст, и считать им опасно. "number" — всё в порядке.
Короткие уроки-истории, симулятор агента и ежедневная практика — в нашем мобильном приложении. Бесплатно.





