JavaScript的eval JSON object问题


Posted in Javascript onNovember 15, 2009

通常的做法就是var jsonData = eval(xmlHttp.responseText)。这看起来似乎一切都是正确的,但当你运行代码的时候,你会发现报“invalid labe”错误了。为什么?我也不清楚,但我找到了解决这个问题的方法。

在我刚遇到这个问题的时候也特别头痛,因为看起来所有编码是正确的,为了测试出现问题的位置,我逐渐缩小代码范围,最终得到如下简短代码:

var jsonStr1 = '{"Name":"Tom","Sex":"Man"}'; 
var jsonObj1 = eval(jsonStr1); 
alert(jsonObj1.Name);

以上代码执行正是报一开始说的invalid labe错误。难道eval函数对某些表达式或对象有限制?于是我又测试了数组对象,代码如下,结果下面代码运行很正常:
var arrStr = '["Tom","Man"]'; 
var arrObj = eval(arrStr); 
alert(arrObj[0]);

难道是我机子上的JavaScript解析器就JSON解析方面出了问题,于是我又测试下面代码,但结果一样正常:
var jsonObj = {"Name":"Tom","Sex":"Man"}; 
alert(jsonObj.Name);

最终我还是没有自行把问题解决,于是根据相关错误信息上网搜索答案,没想到一下子就找到了问题的根源,解决办法就是“在eval的时候,要先把 JSON字符串值用 ‘()'括号先括起来”。网上找的资料都没有说明是什么原因,当然我也还是没有明白正真的原因的。括号是起强制先执行或先运算作用的,返回的JSON就一个完整的对象,中间也没有表达式,为什么还要加括号!像数组这种较复杂点的对象也能正常eval。没办法,就先记着这种用法吧。正确用法如下(注意看eval两端的括号):
var jsonStr2 = '{"Name":"Tom","Sex":"Man"}'; 
var jsonObj2 = eval('(' + jsonStr2 + ')'); 
alert(jsonObj2.Name);
Javascript 相关文章推荐
为jquery.ui.dialog 增加“在当前鼠标位置打开”的功能
Nov 24 Javascript
jquery 层次选择器siblings与nextAll的区别介绍
Aug 02 Javascript
Jquery 复选框取值兼容FF和IE8(测试有效)
Oct 29 Javascript
js拖动div 当鼠标移动时整个div也相应的移动
Nov 21 Javascript
JavaScript中的方法调用详细介绍
Dec 30 Javascript
js中不同的height, top的区别对比
Sep 24 Javascript
html+js实现简单的计算器代码(加减乘除)
Jul 12 Javascript
JS实现的适合做faq或menu滑动效果示例
Nov 17 Javascript
AngularJS路由Ui-router模块用法示例
May 29 Javascript
详解ES6 Symbol 的用途
Oct 14 Javascript
layui点击数据表格添加或删除一行的例子
Sep 12 Javascript
在Angular中实现一个级联效果的下拉框的示例代码
May 20 Javascript
Javascript 中文字符串处理额外注意事项
Nov 15 #Javascript
JavaScript 语法集锦 脚本之家基础推荐
Nov 15 #Javascript
Dojo 学习笔记入门篇 First Dojo Example
Nov 15 #Javascript
flash 得到自身url参数的代码
Nov 15 #Javascript
javascript 去字符串空格终极版(支持utf8)
Nov 14 #Javascript
jQuery checkbox全选/取消全选实现代码
Nov 14 #Javascript
jQuery帮助之CSS尺寸(五)outerHeight、outerWidth
Nov 14 #Javascript
You might like
PHP+Ajax实现的无刷新分页功能详解【附demo源码下载】
2017/07/03 PHP
PHP环形链表实现方法示例
2017/09/15 PHP
Laravel框架实现redis集群的方法分析
2017/09/14 PHP
thinkphp5框架实现数据库读取的数据转换成json格式示例
2019/10/10 PHP
PHP全局使用Laravel辅助函数dd
2019/12/26 PHP
学习ExtJS table布局
2009/10/08 Javascript
自写的一个jQuery圆角插件
2010/10/26 Javascript
jQuery 开发者应该注意的9个错误
2012/05/03 Javascript
js+html5实现canvas绘制椭圆形图案的方法
2016/05/21 Javascript
AngularJS报错$apply already in progress的解决方法分析
2017/01/30 Javascript
vue项目配置同一局域网可使用ip访问的操作
2020/10/23 Javascript
vue-cli 3如何使用vue-bootstrap-datetimepicker日期插件
2021/02/20 Vue.js
[56:13]DOTA2-DPC中国联赛定级赛 LBZS vs Phoenix BO3第一场 1月10日
2021/03/11 DOTA
Python下的subprocess模块的入门指引
2015/04/16 Python
在arcgis使用python脚本进行字段计算时是如何解决中文问题的
2015/10/18 Python
Python实现的径向基(RBF)神经网络示例
2018/02/06 Python
浅谈numpy生成数组的零值问题
2018/11/12 Python
值得收藏,Python 开发中的高级技巧
2018/11/23 Python
Python 实现微信防撤回功能
2019/04/29 Python
在python中,使用scatter绘制散点图的实例
2019/07/03 Python
Python依赖包整体迁移方法详解
2019/08/15 Python
python super函数使用方法详解
2020/02/14 Python
Python 利用OpenCV给照片换底色的示例代码
2020/08/03 Python
iRobot官网:改变生活的家用机器人品牌
2016/09/20 全球购物
BRASTY捷克:购买香水、化妆品、手袋和手表
2017/07/12 全球购物
马来西亚领先的在线礼品店:Giftr
2018/08/23 全球购物
什么是ARP(Address Resolution Protocol)地址解析协议
2013/10/31 面试题
精细化工应届生求职信
2013/11/17 职场文书
教师辞职报告范文
2014/01/20 职场文书
房屋租赁意向书
2014/04/01 职场文书
捐助贫困学生倡议书
2014/05/16 职场文书
员工培训协议书
2014/09/15 职场文书
2014年村党支部工作总结
2014/12/04 职场文书
三严三实·严以修身心得体会
2016/01/15 职场文书
2016年大学生暑期社会实践活动总结
2016/04/06 职场文书
企业转让协议书(范文2篇)
2019/08/15 职场文书