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 相关文章推荐
飞鱼(shqlsl) javascript作品集
Dec 16 Javascript
运用jquery实现table单双行不同显示并能单行选中
Jul 25 Javascript
javascript中length属性的探索
Jul 31 Javascript
JS打开新窗口的2种方式
Apr 18 Javascript
用jQuery实现一些导航条切换,显示隐藏的实例代码
Jun 08 Javascript
AngularJS入门教程(零):引导程序
Dec 06 Javascript
JS获取各种宽度、高度的简单介绍
Dec 19 Javascript
详解微信小程序入门五: wxml文件引用、模版、生命周期
Jan 20 Javascript
Angular2数据绑定详解
Apr 18 Javascript
AngularJS 中ui-view传参的实例详解
Aug 25 Javascript
微信小程序之判断页面滚动方向的示例代码
Aug 30 Javascript
解决Vue的文本编辑器 vue-quill-editor 小图标样式排布错乱问题
Aug 03 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
Drupal 添加模块出现莫名其妙的错误的解决方法(往往出现在模块较多时)
2011/04/18 PHP
PHP里的中文变量说明
2011/07/23 PHP
PHP四舍五入、取整、round函数使用示例
2015/02/06 PHP
php实现当前页面点击下载文件的实例代码
2016/11/16 PHP
Laravel中日期时间处理包Carbon的简单使用
2017/09/21 PHP
laravel框架中控制器的创建和使用方法分析
2019/11/23 PHP
浅析PHP echo 和 print 语句
2020/06/30 PHP
Javascript !!的作用
2008/12/04 Javascript
Javascript仿PHP $_GET获取URL中的参数
2014/05/12 Javascript
浅谈javascript 迭代方法
2015/01/21 Javascript
jQuery子属性过滤选择器用法分析
2015/02/10 Javascript
介绍一个简单的JavaScript类框架
2015/06/24 Javascript
针对初学者的jQuery入门指南
2015/08/15 Javascript
第一篇初识bootstrap
2016/06/21 Javascript
Vuejs第十篇之vuejs父子组件通信
2016/09/06 Javascript
nodejs async异步常用函数总结(推荐)
2017/11/17 NodeJs
简述vue路由打开一个新的窗口的方法
2018/11/29 Javascript
Javascript Dom元素获取和添加详解
2019/09/24 Javascript
通过angular CDK实现页面元素拖放的步骤详解
2020/07/01 Javascript
[36:52]DOTA2真视界:基辅特锦赛总决赛
2017/05/21 DOTA
Python中的推导式使用详解
2015/06/03 Python
10 行 Python 代码教你自动发送短信(不想回复工作邮件妙招)
2018/10/11 Python
Python django框架开发发布会签到系统(web开发)
2020/02/12 Python
深入理解Tensorflow中的masking和padding
2020/02/24 Python
Python爬虫之Spider类用法简单介绍
2020/08/04 Python
HTML5图片层叠的实现示例
2020/07/07 HTML / CSS
美国大尺码女装零售商:TORRID
2016/10/01 全球购物
新西兰最大的在线设计师眼镜店:SmartBuyGlasses新西兰
2017/10/20 全球购物
美术师范毕业生自荐信
2013/11/16 职场文书
广告学专业推荐信范文
2013/11/23 职场文书
大学毕业感言100字
2014/02/03 职场文书
授权委托书格式
2014/07/31 职场文书
大学生迟到检讨书500字
2014/10/17 职场文书
新生儿未入户证明
2015/06/23 职场文书
使用Djongo模块在Django中使用MongoDB数据库
2021/06/20 Python
关于 Python json中load和loads区别
2021/11/07 Python