簡體   English   中英

JSON.parse引發錯誤,而eval不在同一字符串上。 為什么?

[英]JSON.parse throws errors while eval doesn't on the same strings. Why?

假設我有類似的東西

var a = '["\t"]'

如果我做

eval('var result = ' + a)

一切正常。 但是如果我這樣做

var result = JSON.parse(a)

它引發錯誤:意外的令牌。
\\ b,\\ f也會發生同樣的情況:與eval一起使用,而與JSON.parse失敗。 為什么? 遇到“ \\ t”時,解析器的行為方式是否相同?

另一方面,eval和JSON.parse都失敗,並帶有\\ n(如預期的那樣),但是它們也都失敗,都帶有\\ r。 為什么是這樣?

我對這一切有點困惑,所以有人可以解釋發生了什么嗎? 如果可能的話,提供詳細信息:兩種情況下解析器的行為如何?

您必須在JavaScript字符串中轉義\\ ,所以最終會得到

var a = '["\\t"]'

有關詳細信息,請參閱“ http://json.org/

那是因為它不是有效的JSON。

不要嘗試自己編寫JSON。 相反,請使用JSON.stringify正確編碼您的數據。

var json = JSON.stringify(["\t"]);
JSON.parse(json);
//=> ["\t"]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM