eval解析json对象

平时在使用到ajax的时候一般都使用jquery直接使用回调函数,还没发生过什么问题,但是,今天有一个页面直接使用eval来解析执行json对象,居然出现了错误。
一下是执行有错误的代码:


var str = "{'arr':123}";
alert(str);
alert("1111");
var obj = eval("{'arr':123}");
alert("2222");
alert(obj);


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


var str = "{'arr':123}";
alert(str);
alert("1111");
var obj = eval("({'arr':123})");
alert("2222");
alert(obj);


百思不的其解(看来js功底不咋地),找了好久,很多论坛和社区都是只有问题和回答,就是不说为什么。终于在一个地方看到有人这样说了:
[quote]
加一对括号让{...}先强制运算为object
没有括号,eval会认为{}是语句块,因为javascript是语句优先,因此eval后得到的是
"loc_320412":"1","loc_320481":"1",....
这在alert中显然是错误的
[/quote]

总结: 两个花括号之间有两种意义:语句块和JS对象。语句块优先,如果对花括号加上圆括号就只有js对象的含义了。同理,如果json返回的是数组就可以不用加圆括号
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值