Javascript 当eval不在同一字符串上时,JSON.parse抛出错误。为什么?
假设我有Javascript 当eval不在同一字符串上时,JSON.parse抛出错误。为什么?,javascript,json,eval,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失败。为什么会这样? 我对这一切有点困惑,有人能解释一下发生了什么
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"]'
有关详细信息,请参阅因为它不是有效的JSON 不要试图自己编写JSON。相反,请使用JSON.stringify对数据进行正确编码
var json = JSON.stringify(["\t"]);
JSON.parse(json);
//=> ["\t"]
变量a='[\\t]'。您需要转义反斜杠。JSON字符串文本中不能包含文本制表符。该选项卡必须编码为\t.'[\t]'生成的字符串[]是无效的JSON。您的字符串不是您认为的那样。@Core\u转储:因为它与换行符相同,JS sting文本不能跨越多行而不转义换行符。您必须区分字符串的内容和源文本。由于您要计算字符串的内容,因此它将作为源文本进行计算,并且由\r表示的控制字符将根据以下规则进行处理:您能解释为什么会发生这种情况吗。我在哪里看到\-?