Веб

Многострочная строка в JavaScript: эквивалент heredoc Ruby

Как создать многострочную строку в JavaScript с помощью шаблонных литералов (backticks). Примеры преобразования heredoc Ruby в эквивалентный синтаксис JS.

Как я могу присвоить многострочный строковый литерал переменной в JavaScript, и как преобразовать синтаксис heredoc Ruby в JavaScript?

В Ruby я могу использовать синтаксис heredoc следующим образом:

ruby
text = <<HERE
This
Is
A
Multiline
String
HERE

Какой эквивалентный подход существует в JavaScript?

В JavaScript многострочные строки создаются с помощью шаблонных литералов (template literals), заключённых в обратные кавычки ` — это ближайший эквивалент heredoc из Ruby. Вместо <<HERE ... HERE просто используйте `This\nIs\nA\nMultiline\nString`, и все переносы строк сохранятся автоматически. Такой подход работает везде, где поддерживается ES6+, и позволяет вставлять переменные через ${выражение}.


Содержание


Многострочные строки в JavaScript

Многострочная строка в JavaScript — это то, что ищут тысячи разработчиков ежемесячно (по данным Yandex Wordstat, запрос “javascript строки” бьёт рекорды с 1394 показами). Раньше приходилось мучиться с конкатенацией или \n, но с ES6 всё упростилось. Почему это важно? Представьте: вы пишете HTML-шаблон, SQL-запрос или просто длинный текст — без правильного многострочника код превращается в кашу.

Шаблонные литералы решают проблему на раз. Они сохраняют форматирование, переносы и даже отступы. Но что насчёт heredoc Ruby? Там <<HERE позволяет вставить сырой многострочный текст без экранирования. В JS прямого аналога нет, но ` делает то же самое. Подтверждает это официальная документация MDN: обратные кавычки позволяют писать строки на несколько строк и вставлять ${...}.

А вы пробовали? Без этого новички часто попадают в ловушку с одинарными кавычками — там перенос вызовет SyntaxError.


Что такое heredoc в Ruby

Сначала разберёмся с оригиналом. В Ruby heredoc — это синтаксис для многострочных строк, где вы указываете маркер вроде HERE:

ruby
text = <<HERE
This
Is
A
Multiline
String
HERE

Ключевые фичи: сохраняет отступы, не требует экранирования кавычек внутри, поддерживает интерполяцию #{var}. Идеально для HTML, YAML или логов, как описано в руководстве по Ruby.

Но в JS такого <<MARKER нет. Stack Overflow полон вопросов вроде “javascript heredoc” — ответ всегда один: используйте backticks. Почему Ruby повезло больше? Их heredoc появился раньше, а JS эволюционировал позже.


Шаблонные строки: основной эквивалент heredoc

Шаблонные строки JavaScript (или template literals) — ваш heredoc-эквивалент. Объявляются обратными кавычками `. Вот прямое копирование вашего Ruby-примера:

javascript
const text = `This
Is
A
Multiline
String`;
console.log(text);
// Вывод:
// This
// Is
// A
// Multiline
// String

Видишь разницу? Нет HERE, но эффект тот же: переносы реальны, без \n. Плюс интерполяция:

javascript
const name = 'World';
const greeting = `Hello, ${name}!`;

Учебник JavaScript.ru подчёркивает: это лучший способ для переноса строки в JavaScript. Поддержка? Везде с 2015 года — Chrome 41+, Firefox 34+, Node 4+.

Интересно, что Doka Guide прямо сравнивает с Ruby: “эквивалент heredoc — шаблонная строка в backticks”.


Преобразование Ruby heredoc в JavaScript

Переход прост: замените <<HERE на `, а HERE на закрывающую `. Полный алгоритм:

  1. Берите Ruby-код.
  2. Меняйте <<MARKER на `.
  3. Закрывайте той же ` в конце.
  4. #{var}${var}.

Пример трансформации:

Ruby:

ruby
sql = <<SQL
SELECT * FROM users
WHERE id = #{user_id}
SQL

JavaScript:

javascript
const sql = `SELECT * FROM users
WHERE id = ${user_id}`;

Sky.pro подтверждает: backticks — “самый популярный и современный подход”, с таблицей сравнения методов. Разница в интерполяции минимальна — Ruby использует #{} , JS ${}.

Проблемы? Старые браузеры (IE). Решение: Babel или полифилл. Но в 2026 году это relic прошлого.


Альтернативные методы создания многострочных строк

Шаблонные строки — короли, но на всякий случай другие варианты javascript методы строк:

  • Конкатенация с +:
javascript
const text = 'This\n' + 'Is\n' + 'A\nMultiline\nString';

Просто, но уродливо для длинных текстов.

  • Массив и join:
javascript
const text = ['This', 'Is', 'A', 'Multiline', 'String'].join('\n');

Хорошо для динамики, Stack Abuse рекомендует для массивов.

  • \n в обычных строках:
javascript
const text = "This\nIs\nA\nMultiline\nString";

Работает, но переносы в коде сломаются.

По данным Wordstat, “javascript перенос строки” (32) и “javascript символ переноса строки” (6) популярны — все ведут к backticks. Шаблонные выигрывают по читаемости.

А если длина строки важна? text.length посчитает символы верно, включая \n.


Практические примеры и советы

Давайте применим на деле. HTML-шаблон:

javascript
const html = `<div>
 <h1>${title}</h1>
 <p>${content}</p>
</div>`;

Логи с датой:

javascript
const log = `Error at ${new Date().toISOString()}:
${error.message}`;

Советы:

  • Избегайте вложенных backticks: экранируйте как ``` .
  • Для больших строк — tagged templates (React, styled-components).
  • Тестируйте: text.split('\n').length покажет строки.

Wikipedia отмечает: JS template literals — часть тренда на heredoc-подобные фичи. В продакшене это must-have.

Но что если legacy? Тогда \n и join. Выбор за вами.


Источники

  1. Шаблонные строки - JavaScript | MDN
  2. Строки - Современный учебник JavaScript
  3. Создание многострочных строк в JavaScript | Sky.pro
  4. Шаблонные строки — JavaScript | Doka
  5. Creating Multiline Strings in JavaScript | Stack Abuse
  6. Javascript heredoc | Stack Overflow
  7. How To Use Heredoc in Ruby
  8. Here document | Wikipedia

Заключение

Многострочная строка в JavaScript через шаблонные литералы — идеальный эквивалент heredoc Ruby: просто, мощно, с интерполяцией. Забудьте конкатенацию — backticks сделают код чище и читабельнее. Начните использовать сегодня, и ваши шаблоны SQL/HTML засияют. Если застряли на старом JS — fallback на \n, но будущее за ES6+.

Авторы
Проверено модерацией
Модерация
Многострочная строка в JavaScript: эквивалент heredoc Ruby