为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕斯709654 2018-11-20 17:19:38
。。。 有人问了我这个问题。。 我也不是很清楚JSON.parse(`{     "test": "这是一个对象, 里面有 test 字段" }`)上面可以正常运行。。 结果是 {test: "这是一个对象, 里面有 test 字段"}但是 如果 test 字段里面加上 双引号 就有很奇妙的问题..JSON.parse(`{     "test": "这是一个对象, 里面有 "test" 字段" }`)上述会报错 这很正常。现在加入转义符JSON.parse(`{     "test": "这是一个对象, 里面有 \"test\" 字段" }`)结果依然报错,即使我直接输入这种字符串可以正常显示转义后的字符串,如图:奇妙的是。。 我不小心写了这样的代码,使用 \\ 作为转义符而不是 \。。。 结果却是正常的。But Why ?
查看完整描述

1 回答

?
米脂

TA贡献1836条经验 获得超3个赞

应该是因为 JSON.parse 的执行过程其实经历了两次转义吧。

一次是字符串本身的转义:

'{"test": "这是一个对象, 里面有 \\"test\\" 字段"}'

被转换成

'{"test": "这是一个对象, 里面有 \"test\" 字段"}'

(可以直接在浏览器的命令行输入这段字符串)

一次是字符串转对象时的转义:

因为已经被转换成了

'{"test": "这是一个对象, 里面有 \"test\" 字段"}'

"\"会被认为是 """的转义符,就会正确的转成对象。

而当只有一个"\"的时候,到字符串转对象的时候, test 字段值里就有两对双引号,就会报错。

又去查了下 ES5 规范中的 parse 方法:

https://img1.sycdn.imooc.com//5c1c76430001875c06280073.jpg

第一步应该是对应字符串本身的转义

第二步则对应字符串转对象时的转义


查看完整回答
反对 回复 2018-12-21
  • 1 回答
  • 0 关注
  • 1201 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信