因此,在使用文件系统处理我的第一个Node.js项目之一时,遇到了一些让我感到困惑的行为。我在JS中已经读到过,当您需要在字符串中添加反斜杠时,必须添加一个额外的反斜杠才能对其进行转义。甚至Stack Overflow上此处的文本格式也能正确执行。
示例:
let str = "dir1\\file.txt" /* used two '\\' */
这对我来说很有意义。但是,当我将这些字符串打印到Node.js中的控制台时,它们似乎仍然存在额外的反斜杠。但是,我确实在浏览器控制台上对此进行了测试,并且似乎工作正常。为什么这不适用于Node.js?出于某种原因,Node.js是否不遵循此JavaScript约定?
由于这种困惑,过去几天来我一直在从事的个人项目已完全停止。因此,对此进行任何澄清将大有帮助。
答案 0 :(得分:2)
该字符串仅包含一个反斜杠。
直接在Node.js控制台中输出字符串时,它将显示该字符串的内容。例如,
console.log("testing\\123");
输出
testing\123
但是当您输出类似对象的内容时,Node.js会显示该对象的表示形式,并以该表示形式以 stringliteral 格式显示字符串。例如,
console.log({example: "testing\\123"});
输出
{ example: 'testing\\123' }
请注意字符串文字周围的'
,以及反斜杠已被转义的事实。
那里只有一个反斜线,只是它以 stringliteral 表示法显示了字符串。
浏览器控制台显示这两个示例的方式有所不同。例如,Chrome的控制台会以这样的方式显示它们(目前为v72):
第二个示例的Chrome控制台输出(在我看来)比Node.js的输出更加混乱,因为尽管字符串用引号显示,但它不是字符串文字。这只是字符串内容。 (我很多更希望它显示字符串文字,否则,它不会在引号中显示字符串。在我看来,它是遥不可及的第三选择。)
这纯粹是控制台显示字符串的方式不同。在这两种情况下,该字符串都是相同的:其中带有一个反斜杠。
答案 1 :(得分:1)
console.log
函数为您提供调试信息。 console.log
的不同实现是不同的。没有标准描述它们应如何表示字符串。
通常,它们提供在可见输出中包含转义字符的字符串表示形式。
如果要在Node中查看字符串的处理后的值,请写入STDOUT。
process.stdout.write("Your \\ string");