如何避免 Javascript 模板字符串插值中的控制字符解释?

How can I avoid control character interpretation in Javascript template string interpolation?

我有一个包含控制字符(换行符)的字符串变量。我想输出该变量,但将控制字符作为其文字表示而不进行解释:

console.log(`Using "${nl}" as newline`)

其中 nl 变量可能包含 \n\r\r\n 之一。 这个输出当然是

Using
as newline

但应该是例如

Using "\r\n" as newline

我想我需要以某种方式构造这样的字符串

console.log('Using "\r\n" as newline')

所以我一直在尝试通过使用 nl.replace() 添加另一个反斜杠来转义 nl 中的反斜杠,但这似乎不起作用,因为 nl 变量没有实际上包含任何反斜杠字符。

有没有办法通用地执行此操作,即无需为 \n\r\r\n 明确编码?

您可以删除双引号,并使用 JSON.stringify,它也会生成这些引号,并对换行符进行编码(以及更多,例如 TAB、BS、FF,并转义双引号和反斜杠):

let nl = "\r\n";
console.log(`Using ${JSON.stringify(nl)} as newline`);

// Or with a newline in a template literal:

nl = `
`;
console.log(`Using ${JSON.stringify(nl)} as newline`);