javascript - Bagaimana untuk memahami aksara melarikan diri dalam JSON.parse()?
世界只因有你
世界只因有你 2017-06-14 10:51:54
0
1
622

. . . Seseorang bertanya kepada saya soalan ini. . Saya pun tak berapa jelas

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

Di atas boleh berjalan seperti biasa. . Hasilnya ialah {test: "这是一个对象, 里面有 test 字段"}


Tapi kalau test 字段里面加上 双引号 ada masalah yang sangat pelik...

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

Di atas akan melaporkan ralat Ini adalah perkara biasa.

Sertai sekarang转义符

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

Hasilnya masih ralat, walaupun saya memasukkan rentetan ini secara langsung, rentetan yang terlepas boleh dipaparkan seperti biasa, seperti yang ditunjukkan dalam gambar:


Perkara yang menakjubkan ialah. . Saya secara tidak sengaja menulis kod seperti ini, menggunakan \ 作为转义符而不是 . . . Hasilnya adalah normal.


Tetapi Kenapa?

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

membalas semua(1)
学习ing

Sepatutnya kerana proses pelaksanaan JSON.parse sebenarnya mengalami dua pelarian.

Sekali adalah melarikan diri dari rentetan itu sendiri:

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

ditukar kepada

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

(Anda boleh memasukkan rentetan ini terus pada baris arahan penyemak imbas)

Sekali adalah pelarian apabila menukar rentetan kepada objek:

Sebab ia telah ditukar kepada

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

"" akan dianggap sebagai watak melarikan diri """ dan akan ditukar dengan betul menjadi objek.

Apabila hanya ada satu "", apabila rentetan ditukar kepada objek, terdapat dua pasang petikan berganda dalam nilai medan ujian dan ralat akan dilaporkan.

Saya menyemak kaedah parse dalam spesifikasi ES5 sekali lagi:

Langkah pertama adalah untuk melepaskan rentetan yang sepadan itu sendiri

Langkah kedua sepadan dengan melarikan diri semasa menukar rentetan kepada objek

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan