Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当eval不在同一字符串上时,JSON.parse抛出错误。为什么?_Javascript_Json_Eval - Fatal编程技术网

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表示的控制字符将根据以下规则进行处理:您能解释为什么会发生这种情况吗。我在哪里看到\-?