【问题标题】:escaped backslash coming out as "\\" in string转义的反斜杠在字符串中显示为“\\”
【发布时间】:2019-02-28 11:51:18
【问题描述】:

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

例子:

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

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

由于这种混乱,过去几天我一直从事的个人项目已经完全停止。因此,对此的任何澄清都会有很大帮助。

【问题讨论】:

    标签: javascript string escaping


    【解决方案1】:

    不管怎样,字符串只包含一个反斜杠。

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

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

    输出

    测试\123

    但是当你输出类似对象的东西时,Node.js 会显示该对象的表示,并且在该表示中,它会以 string literal 格式显示字符串。例如,

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

    输出

    { 示例:'测试\\123' }

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

    那里只有一个反斜杠,只是它以字符串文字表示法向您显示字符串。

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

    Chrome 的第二个示例的控制台输出(在我看来)比 Node.js 的输出更令人困惑,因为尽管字符串显示在引号中,但它 不是 字符串文字。这只是字符串内容。 (我会非常更喜欢它显示字符串文字,或者如果失败,则不显示引号中的字符串。在我看来,它的作用是遥远的第三选择。)

    这纯粹是控制台显示字符串的方式不同。两种情况下的字符串都是一样的:它有 一个 反斜杠。

    【讨论】:

      【解决方案2】:

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

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

      如果想在Node中查看字符串处理后的值,就写信给STDOUT

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-01-26
        • 2021-12-16
        • 1970-01-01
        • 2018-11-17
        • 1970-01-01
        • 2019-07-31
        • 1970-01-01
        相关资源
        最近更新 更多