1

假设我们在 ES6 中有以下模板文字。

`'{"0": "It's Friday today"}'`

我们如何转义单词It's中的单引号

另外,假设我们有以下模板文字:

`'{"0": "Thursday\nFriday"}'`

我们如何逃避\n上面的。

4

4 回答 4

1

您不必转义它们中的任何一个,除非您想将模板文字的内容用作在某些时候用单引号引用的字符串文字。这看起来真的很可疑:永远不要手动创建 JSON 字符串(如果你这样做了,请不要将它包裹在模板文字中的字符串文字中!:-))。但是,如果您正在寻找在模板文字中定义该字符串文字,这里是如何在字符串文字级别进行转义:

要转义模板将定义的字符串'文字中的in ,您需要在其前面放置一个反斜杠。但是因为反斜杠是模板文字中的转义,所以您需要对反斜杠进行转义,这样它就不会被模板文字消耗,并且稍后在评估字符串文字时使用。所以:It's

// Define the template literal:
const s1 = `'{"0": "It\\'s Friday today"}'`;
// Escaped backslash −^^
console.log(s1);

// Evaluate the single-quoted string literal it defined:
const s2 = eval("(" + s1 + ")");
console.log(s2);

// Since that defined a string containing JSON, let's parse it:
const obj = JSON.parse(s2);
console.log(obj[0]);

在带有 的第二个示例中\n,该\n转义序列正在模板文字级别使用,这意味着模板文字包含换行符。但是从模板文字的角度来看,您希望它不是换行符,因此您...转义它:\\n. 现在它不再是模板文字的换行符,而是单引号字符串文字。现在和It's上面一样:如果不希望单引号字符串字面量消耗\nesape 序列,则需要对其进行转义。这意味着你最终得到\\\\n

// Define the template literal:
// 1st escaped backslash −−−vv
const s1 = `'{"0": "Thursday\\\\nFriday"}'`;
// 2nd escaped backslash −−−−−^^
console.log(s1);

// Evaluate the single-quoted string literal it defined:
const s2 = eval("(" + s1 + ")");
console.log(s2);

// Since that defined a string containing JSON, let's parse it:
const obj = JSON.parse(s2);
console.log(obj[0]);

于 2020-05-29T08:27:26.507 回答
0

1:使用\ '{"0": "It\'s Friday today"}' 2:再次使用\'{"0": "Thursday\\nFriday"}'

于 2020-05-29T08:27:08.337 回答
0

我认为使用反引号是错误的,您可以这样写:

'\'{"0": "It\'s Friday today"}\''

'\'{"0": "Thursday\nFriday"}\''

无论如何,我认为这样做的整个目的过于复杂,如果您只想创建一个 json,只需创建一个对象,然后将其转换为 json:

var obj1 = {0: "It's Friday today"};
var obj2 = {0: "Thursday\nFriday"};

var json1 =  JSON.stringify(obj1);
var json2 =  JSON.stringify(obj2);

var final1 = "'" + json1 + "'";
var final2 = "'" + json2 + "'";

这种方式更容易,并且不太可能出现语法错误。

希望能帮助到你。

于 2020-05-29T08:27:44.953 回答
0

默认情况下,您不必逃避它们。

如果你想稍后解析它,你可以使用模板标签函数。

模板标记函数接收未转义的字符串以允许进一步处理。

例如,String.raw标记函数返回一个字符串而不解析额外的转义:

console.log(String.raw `'{"0": "It\'s Friday today"}'`)
//       A single \ will do it ---^-----v
console.log(String.raw `'{"0": "Thursday\nFriday"}'`)

于 2020-05-30T08:02:46.127 回答