экранированная косая черта, выходящая как "\\" в строке - PullRequest
0 голосов
/ 28 февраля 2019

Поэтому, работая над одним из моих первых проектов Node.js, использующих файловую систему, я столкнулся с некоторым поведением, которое озадачило меня.Я читал, что в JS, когда вам нужно поместить обратную косую черту в строку, вы должны добавить дополнительную обратную косую черту, чтобы избежать ее.Даже форматирование текста здесь, в Stack Overflow, делает это правильно.

Пример:

let str = "dir1\\file.txt" /* used two '\\' */

Это имело смысл для меня.Однако, когда я печатаю эти строки на консоли в Node.js, у них все еще появляется дополнительная обратная косая черта.Однако я проверил это на консоли браузера, и, кажется, он работает нормально.Почему это не работает для Node.js?Неужели Node.js по какой-то причине просто не следует этому соглашению JavaScript?

Личный проект, над которым я работал, за последние несколько дней полностью остановился из-за этой путаницы.Так что любая ясность в этом очень помогла бы.

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Строка содержит только одну обратную косую черту.

Когда вы выводите строку непосредственно в консоль Node.js, она показывает содержимое строки.Например,

console.log("testing\\123");

выводит

testing\123

Но когда вы выводите что-то похожее на объект, Node.js показывает представление этого объекта, а в этом представлении - строкив формате строковый литерал .Например,

console.log({example: "testing\\123"});

выводит

{ example: 'testing\\123' }

Обратите внимание на ' вокруг строкового литерала и тот факт, что обратный слеш экранирован.

Существует только один обратный слештам просто отображается строка в string literal нотации.

Консоли браузера отличаются тем, как они показывают эти два примера.Например, консоль Chrome показывает их следующим образом (в настоящее время v72):

enter image description here

Вывод консоли Chrome для второго примера (на мой взгляд)это скорее сбивает с толку, чем вывод Node.js. Поскольку строка отображается в кавычках, она , а не строковый литерал.Это просто содержимое строки.(Я бы намного предпочел бы, чтобы он показывал строковый литерал, или, если его не получилось, не отображал строку в кавычках. То, что он делает, - это, на мой взгляд, отдаленный третий вариант.)это просто разница в том, как консоли показывают строку.Строка одинакова в обоих случаях: в ней есть один обратный слеш.

0 голосов
/ 28 февраля 2019

console.log функции дают вам информацию об отладке.Разные реализации console.log различны.Не существует стандарта, который описывает, как они должны представлять строку.

Часто они предоставляют представления строк, которые содержат escape-символы в видимом выводе.

Если вы хотите увидеть обработанное значениестрока в узле, затем записать в STDOUT .

process.stdout.write("Your \\ string");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...