当eval不在同一个字符串上时,JSON.parse会抛出错误。为什么呢?

时间:2015-06-11 16:36:55

标签: javascript json eval

假设我有类似

的内容
var a = '["\t"]'

如果我这样做

eval('var result = ' + a)

一切正常。但是如果我做的话

var result = JSON.parse(a)

抛出错误:意外的令牌。
与\ b,\ f相同:使用eval,而使用JSON.parse失败。为什么?遇到“\ t”时,解析器不应该以相同的方式运行吗?
另一方面,eval和JSON.parse都失败了\ n(正如预期的那样),但它们也都失败了\ r \ n。这是为什么?
我对这一切有点困惑所以有人能解释发生了什么吗?如果可能的话详细说明:解析器在两种情况下的表现如何?

2 个答案:

答案 0 :(得分:4)

您必须在JavaScript字符串中转义\,因此您最终会

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

有关详细信息,请参阅" http://json.org/"

答案 1 :(得分:2)

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

不要试图自己编写JSON。相反,请使用JSON.stringify对数据进行正确编码。

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