0

我一直在玩一些 JSON,但是我发现了一些我不太了解的东西,例如,我有这段代码:

var str = "{'name':'vvv'}";                    
var cjson = eval ("(" + str + ")");
alert(cjson.name);

它工作正常,但使用这段代码

var str = "{'name':"+'vvv'+"}";    
var cjson = eval ("(" + str + ")");
alert(cjson.name);

它没有,我收到以下萤火虫错误:ReferenceError: vvv is not defined。

为什么它不适用于第二种方式,在这两种情况下 str 不是一个有效的字符串?

4

2 回答 2

3

这是一个字符串,是的。但不是同一个字符串,也不是有效的 JSON。

 var str = "{'name':" + 'vvv' + "}";

是相同的:

 var str = "{'name':" + "vvv" + "}";

这与以下内容相同:

 var str = "{'name':vvv}";

当您尝试对此进行评估时,就好像您声明了:

 var cjson = { 'name': vvv };

并且您没有名为 的变量vvv

于 2013-08-27T01:21:18.463 回答
0

当你这样做时var str = "{'name':"+'vvv'+"}";,生成的字符串是"{'name':vvv}"wherevvv不是字符串文字。因此 eval 将尝试在执行范围内解决它,因为在那里找不到它会引发错误

于 2013-08-27T01:21:24.800 回答