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 浮点数运算 精度问题
Oct 06 Javascript
jquery 插件开发 extjs中的extend用法小结
Jan 04 Javascript
浅析return false的正确使用
Nov 04 Javascript
用jquery的方法制作一个简单的导航栏
Jun 23 Javascript
jQuery中:text选择器用法实例
Jan 03 Javascript
jQuery实现定时读取分析xml文件的方法
Jul 16 Javascript
js表单元素checked、radio被选中的几种方法(详解)
Aug 22 Javascript
jQuery元素选择器实例代码
Feb 06 Javascript
JS函数节流和函数防抖问题分析
Dec 18 Javascript
react配合antd组件实现的管理系统示例代码
Apr 24 Javascript
Vue实现简单的拖拽效果
Aug 25 Javascript
axios封装与传参示例详解
Oct 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
比特率,大家看看这个就不用收音机音质去比MP3音质了
2021/03/01 无线电
Zend Framework教程之前端控制器Zend_Controller_Front用法详解
2016/03/07 PHP
Thinkphp开发--集成极光推送
2017/09/15 PHP
jquery 表单进行客户端验证demo
2009/08/24 Javascript
jquery中append()与appendto()用法分析
2014/11/14 Javascript
Javascript动态创建表格及删除行列的方法
2015/05/15 Javascript
javascript实现树形菜单的方法
2015/07/17 Javascript
Knockoutjs 学习系列(一)ko初体验
2016/06/07 Javascript
Angular4表单验证代码详解
2017/09/03 Javascript
js实现Tab选项卡切换效果
2020/07/17 Javascript
深入了解JavaScript代码覆盖
2019/06/13 Javascript
Layui选项卡制作历史浏览记录的方法
2019/09/28 Javascript
vue treeselect获取当前选中项的label实例
2020/08/31 Javascript
[04:07]显微镜下的DOTA2第八期——英雄复活动作
2014/06/24 DOTA
python服务器端收发请求的实现代码
2014/09/29 Python
Python列表生成器的循环技巧分享
2015/03/06 Python
Python中time模块与datetime模块在使用中的不同之处
2015/11/24 Python
Django rest framework基本介绍与代码示例
2018/01/26 Python
人工神经网络算法知识点总结
2019/06/11 Python
python计算n的阶乘的方法代码
2019/10/25 Python
Python中random模块常用方法的使用教程
2020/10/04 Python
Python特殊属性property原理及使用方法解析
2020/10/09 Python
python爬虫scrapy基本使用超详细教程
2021/02/20 Python
全球知名鞋履品牌授权零售商:Journeys
2016/09/17 全球购物
找到您丢失的钥匙、钱包和手机:Tile
2017/05/19 全球购物
Amara德国:家居饰品、设计师品牌和豪华礼品
2019/05/20 全球购物
在C语言中"指针和数组等价"到底是什么意思?
2014/03/24 面试题
应届毕业生求职信范例分享
2013/12/17 职场文书
小学门卫岗位职责
2013/12/17 职场文书
通用求职信范文模板分享
2013/12/27 职场文书
大学生校园创业计划书
2014/02/08 职场文书
特教教师先进事迹
2014/05/21 职场文书
结婚当天新郎保证书
2015/05/08 职场文书
因个人原因离职的辞职信范文
2015/05/12 职场文书
2016年元旦主持词
2015/07/06 职场文书
Django+Celery实现定时任务的示例
2021/06/23 Python