eval解析JSON

平时在使用到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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值