String.raw 是标签函数而非方法,用于模板字符串中保留反斜杠字面值;它使 \n\t\\ 输出6字符字符串而非换行+制表+反斜杠;仅适用于反引号模板字符串,不支持插值部分“原始化”。

JavaScript 中并没有 String.raw 方法,而是有一个 String.raw 标签函数(tagged template function),用于获取模板字符串中的原始字符串内容——即忽略所有反斜杠转义序列,保留字面值。
String.raw 的核心作用:保留反斜杠的字面意义
在普通字符串或模板字符串中,
、 、\ 等会被解释为换行、制表符、单个反斜杠等。而 String.raw 会跳过转义解析,把它们当作普通字符处理:
-
` \`→ 实际值是换行 + 制表符 + 反斜杠(共3个字符) -
String.raw` \`→ 实际值是"\n\t\\"(共6个字符,每个反斜杠都未被转义)
常见使用场景:正则表达式与文件路径
写正则时经常要匹配反斜杠本身(如 \d+),或 Windows 路径(如 C:Users
ame)。不用 String.raw 就得反复写双反斜杠,易错且难读:
- 普通写法:
const regex = new RegExp("\\d+");(4个反斜杠才表示一个字面d+) - 用 String.raw:
const regex = new RegExp(String.raw`d+`);(清晰直观) - 路径示例:
String.raw`C:UsersJohnDocuments`→ 字符串就是"C:\Users\John\Documents",没有报错或意外换行
注意:它只对模板字符串起作用
String.raw 是一个标签函数,只能用于带反引号的模板字符串,不能用于普通引号字符串或变量:
立即学习“Java免费学习笔记(深入)”;
- ✅ 正确:
String.raw`hello world`→"hello\nworld" - ❌ 错误:
String.raw("hello world")(不是调用方式,会报错) - ❌ 错误:
String.raw`hello${'x'}world`(插值部分仍按原规则求值,只有静态部分被“原始化”)
和普通转义字符串对比更直观
下面两行输出不同,能清楚体现差异:
-
console.log(` \`);→ 打印一个空行、一个制表符、一个反斜杠 -
console.log(String.raw` \`);→ 打印"\n\t\\"这6个可见字符
不复杂但容易忽略。关键记住:它不是“创建原始字符串的方法”,而是“让模板字符串里那些反斜杠别被解释”的工具。










