。 。 。有人問了我這個問題。 。我也不是很清楚
JSON.parse(`{
"test": "这是一个对象, 里面有 test 字段"
}`)
上面可以正常運作。 。結果是 {test: "這是一個對象, 裡面有 test 欄位"}
#但是 如果 test
欄位裡面加上 雙引號
就有很奇妙的問題..
JSON.parse(`{
"test": "这是一个对象, 里面有 "test" 字段"
}`)
上述會報錯 這很正常。
#現在加入轉義符
JSON.parse(`{
"test": "这是一个对象, 里面有 \"test\" 字段"
}`)
結果依然報錯,即使我直接輸入這種字串可以正常顯示轉義後的字串,如圖:
#奇妙的是。 。我不小心寫了這樣的程式碼,使用 \\
作為轉義符而不是 \
。 。 。結果卻是正常的。
学习ing2017-06-14 10:53:54
應該是因為 JSON.parse 的執行過程其實經歷了兩次轉義吧。
一次是字串本身的轉義:
'{"test": "这是一个对象, 里面有 \"test\" 字段"}'
被轉換成
'{"test": "这是一个对象, 里面有 \"test\" 字段"}'
(可以直接在瀏覽器的命令列輸入這段字串)
一次是字串轉物件時的轉義:
因為已經被轉換成
'{"test": "这是一个对象, 里面有 \"test\" 字段"}'
""會被認為是 """的轉義符,就會正確的轉成物件。
而當只有一個""的時候,到字串轉物件的時候, test 字段值裡就有兩對雙引號,就會報錯。
又去查了下 ES5 規範中的 parse 方法:
第一步應該是對應字串本身的轉義
第二步則對應字串轉物件時的轉義