I. Возможности
Когда я прочитал на MDN про String.raw()
: «The static String.raw()
method is a tag function of template literals, similar to the r
prefix in Python or the @
prefix in C# for string literals» — я здорово обрадовался, потому что мне часто не хватало в JavaScript чего-то вроде одиночных кавычек в Perl.
Я сразу придумал несколько видов использования и стал активно применять их в скриптах.
1. Определение путей к файлам Windows без двойного экранирования.
const r = String.raw;
const test_module = require(r`e:DOCprgjsnode-libtest.js`);
2. Определение путей к ключам реестра Windows.
const r = String.raw;
const Winreg = require('winreg');
const regKey = new Winreg({
hive: Winreg.HKCU,
key: r`SoftwareMPC-HCMPC-HCSettings`
});
3. Создание сложных регулярных выражений из составных литералов.
См. пример кода в одной из недавних статей.
II. Ограничения
Однако со временем я стал натыкаться на неожиданные ограничения. Написав об одном из них в багтрекер V8, я получил отрезвляющее объяснение. Оказывается, хоть String.raw
и выдаёт строку без интерпретации экранированных литералов, на стадии парсинга кода анализатор всё равно требует, чтобы литералы соответствовали правилам. Из этого следуют неочевидные ограничения для упомянутых случаев применения. Читать полностью »