String.raw() возвращает raw-версию шаблонной строки.
Это значит, что escape-последовательности вроде \n, \t или \uXXXX не преобразуются, а остаются в строке как обычные символы \ и буквы после него.
Синтаксис
Чаще всего String.raw() используют как тег шаблонной строки:
String.raw`text`
String.raw`Hello\nworld`
String.raw`Value: ${value}`
Есть и более низкоуровневый вариант вызова:
String.raw({ raw: ["A", "B", "C"] }, 1, 2)
Но на практике обычно используют именно тег шаблонной строки.
Как работает String.raw()
console.log(String.raw`line1\nline2`);
// "line1\nline2"
Для сравнения обычная шаблонная строка обработает \n как перевод строки:
console.log(`line1\nline2`);
Здесь в результате будет уже настоящая новая строка.
Что возвращает метод
String.raw() возвращает обычную строку типа string.
const text = String.raw`hello\nworld`;
console.log(typeof text); // "string"
Когда это полезно
String.raw() удобно использовать, когда:
- нужно показать escape-последовательности как текст
- нужно удобно записать путь или шаблон
- важно сохранить raw-вид шаблонной строки
Пример с путём:
console.log(String.raw`C:\temp\file.txt`);
// "C:\temp\file.txt"
Если записать такую же строку как обычный template literal, часть последовательностей будет интерпретирована:
console.log(`C:\temp\file.txt`);
Это может дать неожиданный результат из-за \t и \f.
String.raw() и подстановки
String.raw() сохраняет raw-вид только у текстовых частей шаблона.
Подставляемые значения ${...} вставляются как обычно.
console.log(String.raw`Hi\n${123}`); // "Hi\n123"
Но если само подставляемое значение уже содержит перевод строки, он останется настоящим переводом строки:
const value = "\n";
console.log(String.raw`A${value}B`);
То есть raw-режим не “замораживает” значения внутри ${...}. Он работает именно с частями шаблона.
String.raw() и обычная строка
String.raw() - это не метод экземпляра строки, а статический метод объекта String.
Правильно:
String.raw`hello\nworld`
Неправильно:
// "hello".raw(); // Ошибка
String.raw() и регулярные выражения
Этот метод бывает удобен, когда нужно записать шаблон как строку и не хочется удваивать обратные слэши.
const pattern = String.raw`\d+\s\w+`;
console.log(pattern); // "\\d+\\s\\w+" как текст шаблона
Это может быть полезно, когда regex-шаблон формируется в виде строки.
Низкоуровневый вызов
String.raw() можно вызвать и без template literal, если вручную передать объект с raw.
console.log(String.raw({ raw: ["A", "B", "C"] }, 1, 2)); // "A1B2C"
Но в обычном коде такой способ используется редко.
Частые ошибки
Думать, что String.raw() делает “сырой” весь результат целиком
const value = "\n";
console.log(String.raw`A${value}B`);
Подставленные значения вставляются как есть. Raw-режим относится только к тексту шаблона.
Пытаться вызвать String.raw() у строки
// "text".raw(); // Ошибка
String.raw() - это статический метод String, а не метод строкового значения.
Путать String.raw() с обычной экранированной строкой
console.log(String.raw`line1\nline2`); // "line1\nline2"
Здесь \n не превращается в перенос строки.
Быстрая памятка
String.raw()чаще всего используют как тег шаблонной строки- метод возвращает обычную строку
- escape-последовательности в шаблоне не обрабатываются
${...}подставляется как обычноString.raw()- статический метод, а не метод строки
Коротко
String.raw() - это статический метод JavaScript, который возвращает raw-версию шаблонной строки. Он полезен, когда нужно сохранить escape-последовательности как текст, например для путей, шаблонов и отладочных строк.