javascript - Comment comprendre les caractères d'échappement dans JSON.parse()?
世界只因有你
世界只因有你 2017-06-14 10:51:54
0
1
620

. . . Quelqu'un m'a posé cette question. . Je ne suis pas très clair non plus

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

Ce qui précède peut fonctionner normalement. . Le résultat est {test: "这是一个对象, 里面有 test 字段"}


Mais si test 字段里面加上 双引号 il y a un problème très étrange...

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

Ce qui précède signalera une erreur. C'est normal.

Inscrivez-vous maintenant转义符

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

Le résultat est toujours une erreur, même si je saisis cette chaîne directement, la chaîne échappée peut être affichée normalement, comme le montre l'image :


Ce qui est étonnant, c'est que. . J'ai accidentellement écrit du code comme celui-ci, en utilisant \ 作为转义符而不是 . . . Le résultat est normal.


Mais pourquoi ?

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

répondre à tous(1)
学习ing

Cela devrait être dû au fait que le processus d'exécution de JSON.parse subit en fait deux échappements.

Once est l'évasion de la chaîne elle-même :

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

est converti en

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

(Vous pouvez saisir cette chaîne directement sur la ligne de commande du navigateur)

Une fois l'échappement lors de la conversion d'une chaîne en objet :

Parce qu'il a été converti en

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

"" sera considéré comme le caractère d'échappement de """ et sera correctement converti en objet.

Lorsqu'il n'y a qu'un seul "", lorsque la chaîne est convertie en objet, il y a deux paires de guillemets doubles dans la valeur du champ de test et une erreur sera signalée.

J'ai vérifié à nouveau la méthode d'analyse dans la spécification ES5 :

La première étape devrait être d'échapper à la chaîne correspondante elle-même

La deuxième étape correspond à l'échappement lors de la conversion d'une chaîne en objet

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal