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 定时局部刷新(setInterval)
Nov 19 Javascript
JS动态添加与删除select中的Option对象(示例代码)
Dec 25 Javascript
JavaScript中的Math.atan2()方法使用详解
Jun 15 Javascript
如何防止JavaScript自动插入分号
Nov 05 Javascript
教你一步步用jQyery实现轮播器
Dec 18 Javascript
js绑定事件和解绑事件
Apr 27 Javascript
vue中七牛插件使用的实例代码
Jul 28 Javascript
在Vuex使用dispatch和commit来调用mutations的区别详解
Sep 18 Javascript
详解create-react-app 2.0版本如何启用装饰器语法
Oct 23 Javascript
JS实现深度优先搜索求解两点间最短路径
Jan 17 Javascript
nuxt踩坑之Vuex状态树的模块方式使用详解
Sep 06 Javascript
JS中准确判断变量类型的方法
Jun 01 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 DataGrid 实现代码
2009/08/12 PHP
一个典型的PHP分页实例代码分享
2011/07/28 PHP
PHP自定义大小验证码的方法详解
2013/06/07 PHP
解密ThinkPHP3.1.2版本之独立分组功能应用
2014/06/19 PHP
简单谈谈php中的unicode和utf8编码
2015/06/10 PHP
简单谈谈php浮点数精确运算
2016/03/10 PHP
Linux(CentOS)下PHP扩展PDO编译安装的方法
2016/04/07 PHP
Ubuntu中支持PHP5与PHP7双版本的简单实现
2018/08/19 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
2020/02/15 PHP
JQuery 学习技巧总结
2010/05/21 Javascript
如何创建一个JavaScript弹出DIV窗口层的效果
2013/09/25 Javascript
把字符串按照特定的字母顺序进行排序的js代码
2014/01/28 Javascript
Javascript解析URL方法详解
2014/12/05 Javascript
JavaScript汉诺塔问题解决方法
2015/04/21 Javascript
超实用的javascript时间处理总结
2016/08/16 Javascript
javascript的几种写法总结
2016/09/30 Javascript
滚动条的监听与内容随着滚动条动态加载的实现
2017/02/08 Javascript
详解AngularJS controller调用factory
2017/05/19 Javascript
详解利用 Express 托管静态文件的方法
2017/09/18 Javascript
微信小程序实现Session功能及无法获取session问题的解决方法
2019/05/07 Javascript
LayUI switch 开关监听 获取属性值、更改状态的方法
2019/09/21 Javascript
浅谈vuex为什么不建议在action中修改state
2020/02/02 Javascript
[06:44]2014DOTA2国际邀请赛-钥匙体育馆开战 开幕式振奋人心
2014/07/19 DOTA
python实现保存网页到本地示例
2014/03/16 Python
python使用多线程不断刷新网页的方法
2015/03/31 Python
进一步探究Python的装饰器的运用
2015/05/05 Python
Python执行时间的计算方法小结
2017/03/17 Python
Django自定义认证方式用法示例
2017/06/23 Python
Python2.7编程中SQLite3基本操作方法示例
2017/08/09 Python
python 集合 并集、交集 Series list set 转换的实例
2018/05/29 Python
python调用摄像头显示图像的实例
2018/08/03 Python
python 基于dlib库的人脸检测的实现
2019/11/08 Python
python爬虫实现获取下一页代码
2020/03/13 Python
马来西亚时装购物网站:ZALORA马来西亚
2017/03/14 全球购物
运动会解说词200字
2014/02/06 职场文书
JavaScript中时间格式化新思路toLocaleString()
2021/11/07 Javascript