Почему String.raw не может заканчиваться бэкслой sh? - PullRequest
3 голосов
/ 24 апреля 2020

String.raw можно использовать для создания строки, содержащей обратные косые черты, без необходимости удваивать эти обратные косые черты.

Исторически сложилось так, что при создании строка:

let str = "C:\\Program Files\\7-Zip";
console.log(str);

String.raw позволяет вашему коду показывать путь без двойной обратной косой черты:

let str = String.raw`C:\Program Files\7-Zip`;
console.log(str);

Приведенный выше код работает нормально, но сегодня я обнаружил, что он не работает, если необработанная строка заканчивается обратным слэшем sh:

let str = String.raw`Can't End Raw With Backslash\`;
console.log(str);

Приведенный выше фрагмент кода вызывает эту ошибку:

{
  "message": "SyntaxError: `` literal not terminated before end of script",
  "filename": "https://stacksnippets.net/js",
  "lineno": 14,
  "colno": 4
}

Почему это исключение?

1 Ответ

5 голосов
/ 24 апреля 2020

Может, но помните, что есть символ "literal" и символ backsla sh. Вы просите буквальный ответный удар. Попросите буквальную обратную косую черту sh:

let str = String.raw`...\\`;

Любой символ, следующий сразу за обратной косой чертой sh, рассматривается как его буквальная версия, независимо от того, что это такое. String.raw может обойти некоторые из этих ограничений, но не все. Он подавляет интерполяцию таких вещей, как \n, но не может помешать вам случайно добавить буквальный обратный удар.

...