如何理解 JSON.parse() 里的转义符呢?

。。。 有人问了我这个问题。。 我也不是很清楚

JSON.parse(`{
    "test": "这是一个对象, 里面有 test 字段"
}`)

上面可以正常运行。。 结果是 {test: "这是一个对象, 里面有 test 字段"}

https://img1.mukewang.com/5c1c760f0001055703280095.jpg


但是 如果 test 字段里面加上 双引号 就有很奇妙的问题..

JSON.parse(`{
    "test": "这是一个对象, 里面有 "test" 字段"
}`)

上述会报错 这很正常。

https://img1.mukewang.com/5c1c7617000148fc04260084.jpg

现在加入转义符

JSON.parse(`{
    "test": "这是一个对象, 里面有 \"test\" 字段"
}`)

结果依然报错,即使我直接输入这种字符串可以正常显示转义后的字符串,如图:

https://img.mukewang.com/5c1c76200001bb9704400119.jpg


奇妙的是。。 我不小心写了这样的代码,使用 \\ 作为转义符而不是 \。。。 结果却是正常的。

https://img2.mukewang.com/5c1c76270001ba1103490083.jpg


But Why ?


慕斯709654
浏览 1203回答 1
1回答

米脂

应该是因为 JSON.parse 的执行过程其实经历了两次转义吧。一次是字符串本身的转义:'{"test": "这是一个对象, 里面有 \\"test\\" 字段"}'被转换成'{"test": "这是一个对象, 里面有 \"test\" 字段"}'(可以直接在浏览器的命令行输入这段字符串)一次是字符串转对象时的转义:因为已经被转换成了'{"test": "这是一个对象, 里面有 \"test\" 字段"}'"\"会被认为是 """的转义符,就会正确的转成对象。而当只有一个"\"的时候,到字符串转对象的时候, test 字段值里就有两对双引号,就会报错。又去查了下 ES5 规范中的 parse 方法:第一步应该是对应字符串本身的转义第二步则对应字符串转对象时的转义
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript