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 相关文章推荐
javascript函数库-集合框架
Apr 27 Javascript
jQuery的实现原理的模拟代码 -5 Ajax
Aug 07 Javascript
editable.js 基于jquery的表格的编辑插件
Oct 24 Javascript
javascript简易缓动插件(源码打包)
Feb 16 Javascript
jQuery插件datalist实现很好看的input下拉列表
Jul 14 Javascript
jQuery插件formValidator自定义函数扩展功能实例详解
Nov 25 Javascript
jquery.Jcrop结合JAVA后台实现图片裁剪上传实例
Nov 05 Javascript
import与export在node.js中的使用详解
Sep 28 Javascript
JS简单实现点击跳转登陆邮箱功能的方法
Oct 31 Javascript
基于 Vue 实现一个酷炫的 menu插件
Nov 14 Javascript
jQuery实现图片上传预览效果功能完整实例【测试可用】
May 28 jQuery
vue2 中二级路由高亮问题及配置方法
Jun 10 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下通过IP获取地理位置的代码(小偷程序)
2011/06/09 PHP
PHP通过插入mysql数据来实现多机互锁实例
2014/11/05 PHP
一个用javascript写的select支持上下键、首字母筛选以及回车取值的功能
2009/09/09 Javascript
js loading加载效果实现代码
2009/11/24 Javascript
JQuery 选择器、过滤器介绍
2011/02/14 Javascript
IE6下opacity与JQuery的奇妙结合
2013/03/01 Javascript
自动最大化窗口的Javascript代码
2013/05/22 Javascript
一个JS的日期格式化算法示例
2013/07/31 Javascript
js/jQuery简单实现选项卡功能
2014/01/02 Javascript
基于Jquery实现万圣节快乐特效
2015/11/01 Javascript
js实现选中页面文字将其分享到新浪微博
2015/11/05 Javascript
jquery插件方式实现table查询功能的简单实例
2016/06/06 Javascript
浅析JS中常用类型转换及运算符表达式
2017/07/23 Javascript
JS设计模式之惰性模式(二)
2017/09/29 Javascript
不使用 JS 匿名函数理由
2017/11/17 Javascript
vue项目中实现的微信分享功能示例
2019/01/21 Javascript
详解微信小程序文件下载--视频和图片
2019/04/24 Javascript
python连接远程ftp服务器并列出目录下文件的方法
2015/04/01 Python
横向对比分析Python解析XML的四种方式
2016/03/30 Python
Python搭建HTTP服务器和FTP服务器
2017/03/09 Python
python条件变量之生产者与消费者操作实例分析
2017/03/22 Python
python2和python3应该学哪个(python3.6与python3.7的选择)
2019/10/01 Python
python进程池实现的多进程文件夹copy器完整示例
2019/11/27 Python
python实现取余操作的简单实例
2020/08/16 Python
CSS3 实现侧边栏展开收起动画
2014/12/22 HTML / CSS
HTML5 图片悬停放大的实现代码示例
2019/12/04 HTML / CSS
Sephora丝芙兰印尼官方网站:购买化妆品和护肤品
2018/07/02 全球购物
Viking比利时:购买办公用品
2019/10/30 全球购物
ManoMano英国:欧洲第一家专注于DIY和园艺市场的电商平台
2020/03/12 全球购物
资产评估专业学生的自我鉴定
2013/11/14 职场文书
公务员保密承诺书
2014/03/27 职场文书
安全保证书范文
2014/04/29 职场文书
2014年英语教师工作总结
2014/12/03 职场文书
蓝天保卫战收官在即 :15行业将开展环保分级评价
2019/07/19 职场文书
利用Python+OpenCV三步去除水印
2021/05/28 Python
教你漂亮打印Pandas DataFrames和Series
2021/05/29 Python