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 select的操作实现代码
May 06 Javascript
细说浏览器特性检测(2)-通用事件检测
Nov 05 Javascript
node.js中使用socket.io的方法
Dec 15 Javascript
JavaScript实现随机替换图片的方法
Apr 16 Javascript
Bootstrap幻灯片轮播图支持触屏左右手势滑动的实现方法
Oct 13 Javascript
JavaScript实现公历转农历功能示例
Feb 13 Javascript
JavaScript-定时器0~9抽奖系统详解(代码)
Aug 16 Javascript
微信小程序实现手势图案锁屏功能
Jan 30 Javascript
vue升级之路之vue-router的使用教程
Aug 14 Javascript
element el-input directive数字进行控制
Oct 11 Javascript
JavaScript原型继承和原型链原理详解
Feb 04 Javascript
es6数组的flat(),flatMap()函数用法实例分析
Apr 18 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
如何做到多笔资料的同步
2006/10/09 PHP
常见php数据文件缓存类汇总
2014/12/05 PHP
php+ajax实时刷新简单实例
2015/02/25 PHP
js+FSO遍历文件夹下文件并显示
2007/03/07 Javascript
一样的table?不一样的table(可编辑状态table)
2012/09/19 Javascript
js+数组实现网页上显示时间/星期几的实用方法
2013/01/18 Javascript
javascript特殊用法示例介绍
2013/11/29 Javascript
form.submit()不能提交表单的错误原因及解决方法
2014/10/13 Javascript
jquery的总体架构分析及实现示例详解
2014/11/08 Javascript
JavaScript判断表单提交时哪个radio按钮被选中的方法
2015/03/21 Javascript
详解JavaScript中shift()方法的使用
2015/06/09 Javascript
jQuery实现可展开合拢的手风琴面板菜单
2015/09/15 Javascript
卸载安装Node.js与npm过程详解
2016/08/15 Javascript
vue2.0+webpack环境的构造过程
2016/11/08 Javascript
js监听input输入框值的实时变化实例
2017/01/26 Javascript
BootstrapValidator实现注册校验和登录错误提示效果
2017/03/10 Javascript
微信小程序使用audio组件播放音乐功能示例【附源码下载】
2017/12/08 Javascript
vue中进入详情页记住滚动位置的方法(keep-alive)
2018/09/21 Javascript
js中this的指向问题归纳总结
2018/11/28 Javascript
在Node.js下运用MQTT协议实现即时通讯及离线推送的方法
2019/01/24 Javascript
vue文件运行的方法教学
2019/02/12 Javascript
微信小程序网络层封装的实现(promise, 登录锁)
2019/05/08 Javascript
inquirer.js一个用户与命令行交互的工具详解
2019/05/18 Javascript
layui表格内放置图片,并点击放大的实例
2019/09/10 Javascript
Python 安装setuptools和pip工具操作方法(必看)
2017/05/22 Python
python编程之requests在网络请求中添加cookies参数方法详解
2017/10/25 Python
详解Python如何生成词云的方法
2018/06/01 Python
python3+selenium自动化测试框架详解
2019/03/17 Python
python中pygame安装过程(超级详细)
2019/08/04 Python
Python图片的横坐标汉字实例
2019/12/04 Python
Django3.0 异步通信初体验(小结)
2019/12/04 Python
Python创建自己的加密货币的示例
2021/03/01 Python
澳大利亚礼品卡商店:Gift Card Store
2019/06/24 全球购物
同步和异步有何异同,在什么情况下分别使用他们?
2012/12/28 面试题
《狼》教学反思
2014/03/02 职场文书
学习焦裕禄观后感
2015/06/09 职场文书