js中调用json对象用json数组有什么区别

为什么我发现json对象是eval('('+str+')');解析字符串
json数组是eval(str);来解析的,这其中有什么不同
这是为什么了??????????

你这里的jsonstr本身就已经是对象了,而json只是字符串,也就是说对方传递过来的字符串而已。
应该写成
var jsonStr = "{qiyi:'mp4',tudou:'3gp',youku:'mp4'}";
这样可以表示jsonStr是一个字符串,而现在要jsonStr去执行一下就可以了!

如:
var c = eval(jsonStr);
然后就可以调用了!如c.qiyi等等。不过这里不太好理解的,eval就是将jsonStr字符串当指令执行了,将执行结果传递给c而已。换一句方式可能会更好的理解的!

eval(" var c = "+jsonStr+";");
也就是说重新组合一个语句,这样可以直接使用c.qiyi了!

但其实是一样的道理的,只不过很少人会用到第二种!因为如果eval没有顺利执行时,第二种会出现错误,而第一种则会出现undefined的结果,第一种与第二种的区别就是不管是否空值,第一种c对象是存在的!而第二种却未必见得!第二种方案下,执行了一个语句,然后就感觉“凭空”开始使用一个对象了!然后这样虽是不好,其中是说明下边的语句都依赖于eval这样的一个细节语句,所以不是很多的!

也就是说:
var c = eval("{qiyi:'mp4',tudou:'3gp',youku:'mp4'}");
就是将json执行后的结果。由此可以看出你对数据传递上还有些不理解的!
温馨提示:答案为网友推荐,仅供参考
相似回答