javascript – Wie versteht man Escape-Zeichen in JSON.parse()?
世界只因有你
世界只因有你 2017-06-14 10:51:54
0
1
624

. . . Jemand hat mir diese Frage gestellt. . Ich bin auch nicht ganz klar

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

Das Obige kann normal ausgeführt werden. . Das Ergebnis ist {test: "这是一个对象, 里面有 test 字段"}


Aber wenn test 字段里面加上 双引号 es ein sehr seltsames Problem gibt...

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

Der obige Fehler wird gemeldet. Das ist normal.

Jetzt beitreten转义符

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

Das Ergebnis ist immer noch ein Fehler. Selbst wenn ich diese Zeichenfolge direkt eingebe, kann die maskierte Zeichenfolge normal angezeigt werden, wie im Bild gezeigt:


Das Erstaunliche ist. . Ich habe versehentlich Code wie diesen mit \ 作为转义符而不是 geschrieben. . . Das Ergebnis ist normal.


Aber warum?

世界只因有你
世界只因有你

Antworte allen(1)
学习ing

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

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

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

被转换成

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

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

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

因为已经被转换成了

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

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

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

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

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

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

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage