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 相关文章推荐
JScript内置对象Array中元素的删除方法
Mar 08 Javascript
用javascript实现的图片马赛克后显示并切换加文字功能
Apr 21 Javascript
Jquery 在页面加载后执行的几种方式
Mar 14 Javascript
Bootstrap入门书籍之(一)排版
Feb 17 Javascript
node.js实现爬虫教程
Aug 25 Javascript
js计算时间差代码【包括计算,天,时,分,秒】
Apr 26 Javascript
自动化测试读写64位操作系统的注册表
Aug 15 Javascript
JS去除重复并统计数量的实现方法
Dec 15 Javascript
Bootstrap table使用方法总结
May 10 Javascript
vue动画效果实现方法示例
Mar 18 Javascript
CKEditor 4.4.1 添加代码高亮显示插件功能教程【使用官方推荐Code Snippet插件】
Jun 14 Javascript
npm qs模块使用详解
Feb 07 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
phpwind中的数据库操作类
2007/01/02 PHP
php上传文件中文文件名乱码的解决方法
2013/11/01 PHP
php实现保存submit内容之后禁止刷新
2014/03/19 PHP
php一个解析字符串排列数组的方法
2015/05/12 PHP
yii使用activeFileField控件实现上传文件与图片的方法
2015/12/28 PHP
基于JavaScript 数据类型之Boolean类型分析介绍
2013/04/19 Javascript
jquery中对于批量deferred的处理方法
2014/01/22 Javascript
Jquery插件编写简明教程
2014/03/25 Javascript
Grunt入门教程(自动任务运行器)
2015/08/06 Javascript
修复jQuery tablesorter无法正确排序的bug(加千分位数字后)
2016/03/30 Javascript
基于gulp合并压缩Seajs模块的方式说明
2016/06/14 Javascript
详解nodejs中的process进程
2017/03/19 NodeJs
jQuery滑动到底部加载下一页数据的实例代码
2017/05/22 jQuery
BootStrap 动态表单效果
2017/06/02 Javascript
原生js FileReader对象实现图片上传本地预览效果
2020/03/27 Javascript
react学习笔记之state以及setState的使用
2017/12/07 Javascript
微信小程序数据存储与取值详解
2018/01/30 Javascript
使用Vue实现调用接口加载页面初始数据
2019/10/28 Javascript
[03:18]DOTA2放量测试专访820:希望玩家加入国服大家庭
2013/08/25 DOTA
Python实现冒泡,插入,选择排序简单实例
2014/08/18 Python
python过滤字符串中不属于指定集合中字符的类实例
2015/06/30 Python
详解python Todo清单实战
2018/11/01 Python
对python_discover方法遍历所有执行的用例详解
2019/02/13 Python
Python3.7 新特性之dataclass装饰器
2019/05/27 Python
Pycharm运行加载文本出现错误的解决方法
2019/06/27 Python
python-OpenCV 实现将数组转换成灰度图和彩图
2020/01/09 Python
基于virtualenv创建python虚拟环境过程图解
2020/03/30 Python
python获取linux系统信息的三种方法
2020/10/14 Python
美国网上眼镜商城:Zenni Optical
2016/11/20 全球购物
会计主管岗位职责范文
2013/11/08 职场文书
2014年家长学校工作总结
2014/11/20 职场文书
新教师教学工作总结
2015/08/14 职场文书
会议开幕致辞怎么写
2016/03/03 职场文书
七年级作文(600字3篇)
2019/09/24 职场文书
MongoDB orm框架的注意事项及简单使用
2021/06/20 MongoDB
代码复现python目标检测yolo3详解预测
2022/05/06 Python