JavaScript String.raw() 语法
String.raw() 是 JavaScript String 对象的一个静态方法,它用于创建一个原始字符串,类似于 Python 的 “r(或 R)前缀” 。
所谓的原始字符串,也就是 “所见即所得”,字符串不会对反斜杠 “\” 进行转义。
语法:
String.raw`templateString`说明:
String.raw() 方法的使用非常特别,首先我们只能在模板字符串(反引号)前面使用它,而不能在普通字符串(单引号或双引号)前面使用。
// 正确
String.raw`绿叶网`
// 错误
String.raw'绿叶网'
// 错误
String.raw"绿叶网"然后在使用 String.raw() 时,不能使用小括号 “()” 把模板字符串包含起来。
// 正确
String.raw`绿叶网`
// 错误
String.raw(`绿叶网`)注意: String.raw 是一个标签函数,它一般直接紧连着模板字符串一起使用,而不需要使用圆括号 ()。
JavaScript String.raw() 摘要
| 属于 | JavaScript String 对象 |
|---|---|
| 使用频率 | 中 |
| 官方文档 | 查看 |
| MDN | 查看 |
JavaScript String.raw() 示例
接下来,我们通过几个简单的例子来讲解一下 JavaScript String.raw() 方法是如何使用的。
示例 1:不使用 String.raw()
const str ="C:\northwest\northwind";
console.log(str);运行结果如下。
C:
orthwest
orthwind分析:
在文件操作中,我们经常要获取一个文件的路径。上面的示例本来想输出一个文件的路径,但是却发现运行结果跟预期不一样。这是因为 JavaScript 把 “\n” 看成一个转义字符了。想要解决这个问题,我们可以在 “\” 前面加上一个 “\”,此时 JavaScript 就会把 “\\” 看成一个转义字符。
const str ="C:\\northwest\\northwind";
console.log(str);但上面这种方式并不直观,显得比较麻烦。那还有没有更好的解决方法呢?这个时候使用 String.raw() 创建的原始字符串就可以派上用场了,请看下面例子。
示例 2:使用 String.raw()
const str = String.raw`C:\northwest\northwind`;
console.log(str);运行结果如下。
C:\northwest\northwind分析:
当一个模板字符串前面加上 String.raw 时,表示这不是一个普通字符串,而是一个原始字符串。
所谓 “原始字符串”,就是你看到的字符串是怎样的,最终它就是怎样的,JavaScript 不会对这个字符串进行转义。比如 JavaScript 看到反斜杠,那就是反斜杠,此时 JavaScript 就不会把 “\n” 看成一个转义字符。简单来说,String.raw 相当于一个声明:不需要处理字符串中的特殊字符。
当一个字符串中有很多需要转义的字符时,如果每一个都用反斜杠 “\” 来取消,这是一件很麻烦的事情。在这种情况下,使用原始字符串就会更加方便与直观。
需要注意的是,只能在模板字符串(使用反引号)前面使用 String.raw,如果在普通字符串(即使用单引号或双引号)前面使用 String.raw 则会报错。
// 正确
const str = String.raw`C:\northwest\northwind`;
// 错误
const str = String.raw"C:\northwest\northwind";此外,虽然 String.raw 可以保留反斜杠(\),但它不能以单个反斜杠结尾。这是因为反斜杠会转义紧随其后的反引号,导致语法错误。比如:
// 错误:SyntaxError 异常
// String.raw`C:\Windows\`
// 正确:使用插值或手动拼接
console.log(String.raw`C:\Windows` + "\\");示例 3:String.raw() 插值功能
const folder = "User";
const path = String.raw`C:\${folder}\Documents`;
console.log(path);运行结果如下。
C:\User\Documents分析:
String.raw 后面接的是一个模板字符串,因此我们也可以使用模板字符串的插值功能。
