假设我有类似
的内容var a = '["\t"]'
如果我这样做
eval('var result = ' + a)
一切正常。但是如果我做的话
var result = JSON.parse(a)
抛出错误:意外的令牌。
与\ b,\ f相同:使用eval,而使用JSON.parse失败。为什么?遇到“\ t”时,解析器不应该以相同的方式运行吗?
另一方面,eval和JSON.parse都失败了\ n(正如预期的那样),但它们也都失败了\ r \ n。这是为什么?
我对这一切有点困惑所以有人能解释发生了什么吗?如果可能的话详细说明:解析器在两种情况下的表现如何?
答案 0 :(得分:4)
答案 1 :(得分:2)
那是因为它不是有效的JSON。
不要试图自己编写JSON。相反,请使用JSON.stringify
对数据进行正确编码。
var json = JSON.stringify(["\t"]);
JSON.parse(json);
//=> ["\t"]