javascript - 如何理解 JSON.parse() 裡的轉義符呢?
世界只因有你
世界只因有你 2017-06-14 10:51:54
0
1
618

。 。 。有人問了我這個問題。 。我也不是很清楚

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

上面可以正常運作。 。結果是 {test: "這是一個對象, 裡面有 test 欄位"}


#但是 如果 test 欄位裡面加上 雙引號 就有很奇妙的問題..

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

上述會報錯 這很正常。

#現在加入轉義符

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

結果依然報錯,即使我直接輸入這種字串可以正常顯示轉義後的字串,如圖:


#奇妙的是。 。我不小心寫了這樣的程式碼,使用 \\ 作為轉義符而不是 \。 。 。結果卻是正常的。


#But Why ?

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

全部回覆(1)
学习ing

應該是因為 JSON.parse 的執行過程其實經歷了兩次轉義吧。

一次是字串本身的轉義:

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

被轉換成

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

(可以直接在瀏覽器的命令列輸入這段字串)

一次是字串轉物件時的轉義:

因為已經被轉換成

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

""會被認為是 """的轉義符,就會正確的轉成物件。

而當只有一個""的時候,到字串轉物件的時候, test 字段值裡就有兩對雙引號,就會報錯。

又去查了下 ES5 規範中的 parse 方法:

第一步應該是對應字串本身的轉義

第二步則對應字串轉物件時的轉義

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板