转义的反斜杠在字符串中以“ \\”出现

时间:2019-02-28 11:51:18

标签: javascript string escaping

因此,在使用文件系统处理我的第一个Node.js项目之一时,遇到了一些让我感到困惑的行为。我在JS中已经读到过,当您需要在字符串中添加反斜杠时,必须添加一个额外的反斜杠才能对其进行转义。甚至Stack Overflow上此处的文本格式也能正确执行。

示例:

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

这对我来说很有意义。但是,当我将这些字符串打印到Node.js中的控制台时,它们似乎仍然存在额外的反斜杠。但是,我确实在浏览器控制台上对此进行了测试,并且似乎工作正常。为什么这不适用于Node.js?出于某种原因,Node.js是否不遵循此JavaScript约定?

由于这种困惑,过去几天来我一直在从事的个人项目已完全停止。因此,对此进行任何澄清将大有帮助。

2 个答案:

答案 0 :(得分:2)

该字符串仅包含一个反斜杠。

直接在Node.js控制台中输出字符串时,它将显示该字符串的内容。例如,

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

输出

testing\123

但是当您输出类似对象的内容时,Node.js会显示该对象的表示形式,并以该表示形式以 stringliteral 格式显示字符串。例如,

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

输出

{ example: 'testing\\123' }

请注意字符串文字周围的',以及反斜杠已被转义的事实。

那里只有一个反斜线,只是它以 stringliteral 表示法显示了字符串。

浏览器控制台显示这两个示例的方式有所不同。例如,Chrome的控制台会以这样的方式显示它们(目前为v72):

enter image description here

第二个示例的Chrome控制台输出(在我看来)比Node.js的输出更加混乱,因为尽管字符串用引号显示,但它不是字符串文字。这只是字符串内容。 (我很多更希望它显示字符串文字,否则,它不会在引号中显示字符串。在我看来,它是遥不可及的第三选择。)

这纯粹是控制台显示字符串的方式不同。在这两种情况下,该字符串都是相同的:其中带有一个反斜杠。

答案 1 :(得分:1)

console.log函数为您提供调试信息。 console.log的不同实现是不同的。没有标准描述它们应如何表示字符串。

通常,它们提供在可见输出中包含转义字符的字符串表示形式。

如果要在Node中查看字符串的处理后的值,请写入STDOUT

process.stdout.write("Your \\ string");