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的让页面控件不可用的实现代码
Apr 27 Javascript
JavaScript中继承的一些示例方法与属性参考
Aug 07 Javascript
JavaScript字符串对象slice方法入门实例(用于字符串截取)
Oct 16 Javascript
JS中frameset框架弹出层实例代码
Apr 01 Javascript
JavaScript String 对象常用方法详解
May 13 Javascript
JavaScript toUpperCase()方法使用详解
Aug 26 Javascript
纯JS实现表单验证实例
Dec 24 Javascript
js中的DOM模拟购物车功能
Mar 22 Javascript
javascript 数据存储的常用函数总结
Jun 01 Javascript
vue 2.1.3 实时显示当前时间,每秒更新的方法
Sep 16 Javascript
Electron中实现大文件上传和断点续传功能
Oct 28 Javascript
详解如何在Node.js的httpServer中接收前端发送的arraybuffer数据
Nov 11 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
火车头采集器3.0采集图文教程
2007/03/17 PHP
浅析PHP 按位与或 (^ 、&)
2013/06/21 PHP
ThinkPHP3.1基础知识快速入门
2014/06/19 PHP
PHP生成不重复标识符的方法
2014/11/21 PHP
PHP解析RSS的方法
2015/03/05 PHP
typecho插件编写教程(一):Hello World
2015/05/28 PHP
Zend Framework教程之Zend_Registry对象用法分析
2016/03/22 PHP
简单的JS多重继承示例
2008/03/13 Javascript
JavaScript 题型问答有答案参考
2010/02/17 Javascript
Jquery 扩展方法
2010/05/06 Javascript
JS实现动态移动层及拖动浮层关闭的方法
2015/04/30 Javascript
jquery编写Tab选项卡滚动导航切换特效
2020/07/17 Javascript
jQuery使用$.extend(true,object1, object2);实现深拷贝对象的方法分析
2019/03/06 jQuery
浅析Python中的for 循环
2016/06/09 Python
Python循环语句中else的用法总结
2016/09/11 Python
Python数据处理numpy.median的实例讲解
2018/04/02 Python
Flask框架Flask-Login用法分析
2018/07/23 Python
Python实现获取汉字偏旁部首的方法示例【测试可用】
2018/12/18 Python
Python3.9又更新了:dict内置新功能
2020/02/28 Python
在django项目中导出数据到excel文件并实现下载的功能
2020/03/13 Python
Python利用Xpath选择器爬取京东网商品信息
2020/06/01 Python
Django后端分离 使用element-ui文件上传方式
2020/07/12 Python
Python3.9最新版下载与安装图文教程详解(Windows系统为例)
2020/11/28 Python
利用HTML5绘制点线面组成的3D图形的示例
2015/05/12 HTML / CSS
The North Face北面英国官网:美国著名户外品牌
2017/12/13 全球购物
加拿大廉价机票预订网站:CheapOair.ca
2018/03/04 全球购物
Seavenger官网:潜水服、浮潜、靴子和袜子
2020/03/05 全球购物
泰国时尚电商:POMELO Fashion
2020/03/11 全球购物
职称自我鉴定
2013/10/15 职场文书
新农村建设典型材料
2014/05/31 职场文书
学生会干部自我鉴定2014
2014/09/18 职场文书
2015年建党94周年演讲稿
2015/03/19 职场文书
会议简报格式范文
2015/07/20 职场文书
煤矿安全生产管理协议书
2016/03/22 职场文书
python获取淘宝服务器时间的代码示例
2021/04/22 Python
MySQL数据库实验之 触发器和存储过程
2022/06/21 MySQL