JavaScript - 如何在字符串中显示转义字符?

83
非常简单的问题,但出于某种原因,我在谷歌搜索了10分钟后仍然找不到答案。 我该如何在JavaScript中打印时显示转义字符?
例子:
str = "Hello\nWorld";
console.log(str);

提供:

Hello
World

当我希望它给出:

Hello\nWorld

6
这个问题被标记为重复,但我认为大家期望的答案在这里。 :) - Jonathan H
2
我想补充一下答案,即可以简单地使用 String.raw\Hello\nWorld``,但是这个问题被错误地标记为重复。 - Somo S.
3个回答

139
如果你的目标是使用字符串字面量来创建一个字符串,就像这样:
str = "Hello\nWorld";

并以字符串文字形式输出其包含的内容(一个相当特定的用例),您可以使用JSON.stringify

console.log(JSON.stringify(str)); // ""Hello\nWorld""

const str = "Hello\nWorld";
const json = JSON.stringify(str);
console.log(json); // ""Hello\nWorld""
for (let i = 0; i < json.length; ++i) {
    console.log(`${i}: ${json.charAt(i)} (0x${json.charCodeAt(i).toString(16).toUpperCase().padStart(4, "0")})`);
}
.as-console-wrapper {
    max-height: 100% !important;
}

这是一个相当不寻常的事情,尽管有时在尴尬的情况下对于调试很有帮助,但由于某种原因,你不能直接使用调试器。 console.log(至少在Chrome的实现中)会添加外部引号,但其中的内容是一个字符串字面量(是的,有点令人困惑)。 JSON.stringify接受你提供的内容(在这种情况下是一个字符串),并返回一个包含该值的有效JSON的字符串。所以对于上面的例子,它返回一个开引号("),单词Hello,一个反斜杠(\),字母n,单词World,和一个闭引号(")。字符串中的换行符在输出中被转义为\n,因为这是在JSON中编码换行符的方式。其他转义序列也以类似的方式编码。
要明确的是,如果你只想创建一个包含 Hello\nWorld 的字符串,你不需要使用 JSON.stringify。只需转义反斜杠,使其不被视为转义字符:"Hello\\nWorld"

console.log("Hello\\nWorld");

JSON.stringify 这个东西只是用于在字符串中包含换行符等内容时,以类似字符串文字的输出形式显示,通常用于调试。

1
@icosamuel - 该字符串中没有反斜杠。"asdasd\Sasdasd"应为"asdasdSasdasd"。当您转义一个没有特殊含义的字符时,结果就是该字符本身。换句话说,"\S".length的长度为1,因为它定义了一个包含S的单字符字符串,就像"S"一样。 - T.J. Crowder
1
@icosamuel - 不是使用字符串字面量; 一旦解析了字符串字面量,该\就消失了,因为它没有意义。如果您使用模板文字,可以使用String.raw标记的模板函数:String.raw \ \S`(请注意,这些是反引号,而不是引号),返回"\S"`。 - T.J. Crowder
1
我之前没有想到过在非对象上使用JSON.stringify,这真的非常有帮助。谢谢! - Josh Powlison
1
@BobStein - 完成! - T.J. Crowder
1
@SanjayVamja - 是的,那是U+00A0,主要用于不换行的空格。在JavaScript字符串字面量中,它的转义符为\xA0\u00A0,但作为字面字符也是完全有效的。 - T.J. Crowder
显示剩余6条评论

29
JavaScript使用 \ (反斜杠)作为转义字符来转义以下内容:
  • \' 单引号
  • \" 双引号
  • \ 反斜杠
  • \n 换行符
  • \r 回车符
  • \t 制表符
  • \b 退格符
  • \f 换页符
  • \v 垂直制表符(IE < 9将 '\v' 视为 'v' 而不是垂直制表符('\x0B')。如果跨浏览器兼容性是一个问题,请使用 \x0B 而不是\v。)
  • \0 空字符(U+0000 NULL)(仅当下一个字符不是十进制数字时;否则它是一个八进制转义序列)
请注意,JSON字符串中不允许使用 \v 和 \0 转义。

22

你需要对反斜杠进行转义,因此请尝试这样做:

str = "Hello\\nWorld";

这里有更多在Javascript中需要转义的字符。


只有这个反斜杠可以正常工作,字符串化不行,特别是如果你单独使用它。 - user5515

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接