六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 50|回复: 0

eval解析JSON

[复制链接]

升级  82%

9

主题

9

主题

9

主题

童生

Rank: 1

积分
41
 楼主| 发表于 2013-1-23 02:45:13 | 显示全部楼层 |阅读模式
平时在使用到ajax的时候一般都使用jquery直接使用回调函数,还没发生过什么问题,但是,今天有一个页面直接使用eval来解析执行json对象,居然出现了错误。
一下是执行有错误的代码:

Javascript代码

   1. var str = "{'arr':123}";  
   2. alert(str);  
   3. alert("1111");  
   4. var obj = eval("{'arr':123}");  
   5. alert("2222");  
   6. alert(obj);  

var str = "{'arr':123}";

alert(str);

alert("1111");

var obj = eval("{'arr':123}");

alert("2222");

alert(obj);

后来谷歌了一盘,他们说:要加一个圆口号。这下就对了:

Javascript代码

   1. var str = "{'arr':123}";  
   2. alert(str);  
   3. alert("1111");  
   4. var obj = eval("({'arr':123})");  
   5. alert("2222");  
   6. alert(obj);  

var str = "{'arr':123}";

alert(str);

alert("1111");

var obj = eval("({'arr':123})");

alert("2222");

alert(obj);

百思不的其解(看来js功底不咋地),找了好久,很多论坛和社区都是只有问题和回答,就是不说为什么。终于在一个地方看到有人这样说了:

引用

加一对括号让{...}先强制运算为object
没有括号,eval会认为{}是语句块,因为javascript是语句优先,因此eval后得到的是
"loc_320412":"1","loc_320481":"1",....
这在alert中显然是错误的

总结: 两个花括号之间有两种意义:语句块和JS对象。语句块优先,如果对花括号加上圆括号就只有js对象的含义了。同理,如果json返回的是数组就可以不用加圆括号

原文地址:

http://throne212.iteye.com/blog/300554
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表