搜尋

首頁  >  問答  >  主體

javascript - 如何理解 JSON.parse() 裡的轉義符呢?

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

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

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


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

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

上述會報錯 這很正常。

#現在加入轉義符

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

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


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


#But Why ?

世界只因有你世界只因有你2794 天前626

全部回覆(1)我來回復

  • 学习ing

    学习ing2017-06-14 10:53:54

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

    一次是字串本身的轉義:

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

    被轉換成

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

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

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

    因為已經被轉換成

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

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

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

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

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

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

    回覆
    0
  • 取消回覆