. . . 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.
Sepatutnya kerana proses pelaksanaan JSON.parse sebenarnya mengalami dua pelarian.
Sekali adalah melarikan diri dari rentetan itu sendiri:
ditukar kepada
(Anda boleh memasukkan rentetan ini terus pada baris arahan penyemak imbas)
Sekali adalah pelarian apabila menukar rentetan kepada objek:
Sebab ia telah ditukar kepada
"" 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