转义序列是开头的转义字符和其后面的字符组成的序列。转义字符会改变它后面字符的含义,使不可打印的控制字符打印出来(也可以使控制字符失去原来的含义)。然而,我们不一定总是希望字符被转义。

        例如,在Javascript中,JSON.parse()会将转义字符转义成控制字符,然后由于JSON中不允许存在这些字符而报错:[danger]Uncaught SyntaxError: Unexpected token in JSON at position 114514[/danger]在C#中也常有正则表达式或者路径里有一堆“\”被认为是转义字符的情况。然而加“\”再转义会降低代码的可读性(考虑一下一个全是\的字符串)。为了解决这类问题,C#这样的语言中引入了在字符串前面添加@来忽略这个字符串中的转义字符的特性,Javascipt中起类似功能的就是String.raw()。至于怎么用,我们先来看看MDN怎么说:

String.raw() 是一个模板字符串的标签函数,它的作用类似于 Python 中的字符串前缀 r 和 C# 中的字符串前缀 @(还是有点区别的,详见隔壁 Chromium 那边的这个 issue),是用来获取一个模板字符串的原始字符串的,比如说,占位符(例如 ${foo})会被处理为它所代表的其他字符串,而转义字符(例如 \n)不会。

语法

String.raw(callSite, ...substitutions)

String.raw`templateString`

参数

callSite
一个模板字符串的“调用点对象”。类似{ raw: ['foo', 'bar', 'baz'] }
...substitutions
任意个可选的参数,表示任意个内插表达式对应的值。
templateString
模板字符串,可包含占位符(${...})。

返回值

给定模板字符串的原始字符串。

异常

TypeError
如果第一个参数没有传入一个格式正确的对象,则会抛出 TypeError 异常。

Mozilla贡献者基于CC-BY-SA 2.5协议发布的String.raw() - Javascript.

MDN文档中提到的Chrome表现不一致的这个2016年的issue似乎已经解决了,可以自行console.log(String.raw`с:\x.js`);看一下你的浏览器是否能正常输出"с:\x.js"

只是为了使JSON.parse()忽略转义序列的话,我们用其最基本的功能就行了:

JSON.parse(String.raw`{"data":"String\r\n\r\nraw"}`) 
//返回值:{data: "String↵↵raw"}
let str = 'raw'
JSON.parse(String.raw`{"data":"String\r\n\r\n${str}"}`) 
//返回值:{data: "String↵↵raw"},
//String.raw()依然会解释模板,所以结果应该和上面一样

不过,如果你已经在使用got这样的AJAX库的话,可能这些库已经在内部自动帮你解决了这些问题(不过多一个知识点也没什么错吧