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 变量基础知识
Nov 07 Javascript
Javascript 实现TreeView CheckBox全选效果
Jan 11 Javascript
js简易namespace管理器 实例代码
Jun 21 Javascript
javascript操作ul中li的方法
May 14 Javascript
JS实现统计复选框选中个数并提示确定与取消的方法
Jul 01 Javascript
通过node-mysql搭建Windows+Node.js+MySQL环境的教程
Mar 01 Javascript
利用Bootstrap实现表格复选框checkbox全选
Dec 21 Javascript
ES6中字符串string常用的新增方法小结
Nov 07 Javascript
面包屑导航详解
Dec 07 Javascript
原生JavaScript之es6中Class的用法分析
Feb 23 Javascript
《javascript设计模式》学习笔记一:Javascript面向对象程序设计对象成员的定义分析
Apr 07 Javascript
用javascript实现倒计时效果
Feb 09 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 反向排序和随机排序代码
2010/06/30 PHP
支持中文、字母、数字的PHP验证码
2015/05/04 PHP
PHP+mysql防止SQL注入的方法小结
2019/04/27 PHP
PHP安全之register_globals的on和off的区别
2020/07/23 PHP
精通Javascript系列之数值计算
2011/06/07 Javascript
jquery 实现二级/三级/多级联动菜单的思路及代码
2013/04/08 Javascript
window.showModalDialog参数传递中含有特殊字符的处理方法
2013/06/06 Javascript
百度UEditor编辑器如何关闭抓取远程图片功能
2015/03/03 Javascript
用JavaScript获取页面文档内容的实现代码
2016/06/10 Javascript
AngularJS通过ng-route实现基本的路由功能实例详解
2016/12/13 Javascript
解决vue中监听input只能输入数字及英文或者其他情况的问题
2018/08/30 Javascript
vue.js 双层嵌套for遍历的方法详解, 类似php foreach()
2018/09/07 Javascript
nodejs分离html文件里面的js和css的方法
2019/04/09 NodeJs
JS实现的碰撞检测与周期移动完整示例
2019/09/02 Javascript
a标签调用js的方法总结
2019/09/05 Javascript
layer插件实现在弹出层中弹出一警告提示并关闭弹出层的方法
2019/09/24 Javascript
javascript实现支付宝滑块验证码效果
2020/07/24 Javascript
[50:29]2014 DOTA2华西杯精英邀请赛 5 24 DK VS iG
2014/05/26 DOTA
python函数参数*args**kwargs用法实例
2013/12/04 Python
Python 数据结构之旋转链表
2017/02/25 Python
Win8下python3.5.1安装教程
2020/07/29 Python
在Python中输入一个以空格为间隔的数组方法
2018/11/13 Python
基于Python的接口自动化读写excel文件的方法
2021/01/15 Python
全球最大的瓷器、水晶和银器零售商:Replacements
2020/06/15 全球购物
Weblogic的布署方式
2013/08/23 面试题
Java方面的关于数组和继承的笔面试题
2015/09/18 面试题
《燕子专列》教学反思
2014/02/21 职场文书
企业厂务公开实施方案
2014/03/26 职场文书
绘画专业自荐信
2014/07/04 职场文书
刑事辩护授权委托书范本
2014/10/17 职场文书
医院护士工作检讨书
2014/10/26 职场文书
三好学生主要事迹材料
2015/11/03 职场文书
2019新员工心得体会
2019/06/25 职场文书
JavaScript数组 几个常用方法总结
2021/11/11 Javascript
php双向队列实例讲解
2021/11/17 PHP
Springboot/Springcloud项目集成redis进行存取的过程解析
2021/12/04 Redis