Как присвоить многострочную строку переменной в JavaScript?
Использование шаблонных строк (Template Literals) — современный и правильный способ
В современном JavaScript (начиная с ES6 / ECMAScript 2015) лучший способ создать многострочную строку — это использовать шаблонные строки (template literals). Они используют обратные кавычки (backticks) ` вместо одинарных или двойных кавычек и позволяют естественным образом переносить текст на новые строки.
Вот как будет выглядеть ваш пример:
const message = `Привет, мир!
Это вторая строка.
А это третья строка.`;
console.log(message);
// Вывод:
// Привет, мир!
// Это вторая строка.
// А это третья строка.
Шаблонные строки сохраняют все пробелы и переносы строк внутри обратных кавычек. Это очень удобно для:
- HTML-шаблонов — вставка больших кусков разметки прямо в код.
- SQL-запросов — форматирование запросов для читаемости.
- Текстовых сообщений — письма, уведомления.
Интерполяция выражений (вставка переменных)
Главное преимущество шаблонных строк — возможность вставлять значения переменных и выражения прямо в строку с помощью синтаксиса ${...}:
const name = "Алексей";
const age = 30;
const greeting = `Привет, ${name}!
Тебе уже ${age} лет.
Через год будет ${age + 1}.`;
console.log(greeting);
// Вывод:
// Привет, Алексей!
// Тебе уже 30 лет.
// Через год будет 31.
Это гораздо удобнее, чем конкатенация строк через +.
Старый способ (для обратной совместимости)
Если вы работаете с очень старым кодом (до ES6) или не можете использовать шаблонные строки по каким-то причинам, можно использовать конкатенацию строк с явным указанием символа новой строки \n:
var message = 'Привет, мир!\n' +
'Это вторая строка.\n' +
'А это третья строка.';
Или с помощью массива и метода join():
var message = [
'Привет, мир!',
'Это вторая строка.',
'А это третья строка.'
].join('\n');
Важные моменты
- Отступы сохраняются: если вы используете отступы внутри шаблонной строки, они тоже попадут в итоговую строку. Иногда это нежелательно, и нужно обрезать лишние пробелы.
- Экранирование: если вам нужен символ обратной кавычки внутри шаблонной строки, экранируйте его:
\`. - Производительность: шаблонные строки работают так же быстро, как и обычная конкатенация, и код становится чище.
Рекомендую всегда использовать шаблонные строки для многострочного текста в современном JavaScript. Это стандарт де-факто и самый читаемый способ.
<<Альтернативный подход: экранирование переносов строк и функция-хелпер
Иногда бывает нужно сохранить многострочную строку, но при этом не хочется, чтобы в ней были лишние пробелы или символы переноса. Например, если вы формируете SQL-запрос или JSON и хотите видеть аккуратный код, но итоговая строка должна быть однострочной.
В таких случаях можно использовать экранирование переноса строки внутри шаблонной строки с помощью обратного слеша \ в конце строки:
const longQuery = `SELECT * FROM users \
WHERE age > 18 \
ORDER BY name;`;
console.log(longQuery);
// Вывод: SELECT * FROM users WHERE age > 18 ORDER BY name;
Этот трюк делает код читаемым, но итоговая строка не содержит символов новой строки. Однако будьте осторожны: после обратного слеша не должно быть никаких пробелов или других символов, иначе экранирование не сработает.
Ещё один вариант для очень старых браузеров (Internet Explorer) — использовать комментарии и join, хотя это уже архаизм:
var multiline = [
"Первая строка",
"Вторая строка",
"Третья строка"
].join("\n");
Но в 2023 году это уже неактуально — шаблонные строки поддерживаются всеми современными средами (Node.js, Chrome, Firefox, Safari, Edge).