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 EasyPager 分页函数
May 25 Javascript
输入框过滤非数字的js代码
Sep 18 Javascript
Angular 4依赖注入学习教程之组件服务注入(二)
Jun 04 Javascript
利用js实现前后台传送Json的示例代码
Mar 29 Javascript
关于echarts在节点显示动态数据及添加提示文本所遇到的问题
Apr 20 Javascript
通过webpack引入第三方库的方法
Jul 20 Javascript
JavaScript碎片—函数闭包(模拟面向对象)
Mar 13 Javascript
JavaScript学习教程之cookie与webstorage
Jun 23 Javascript
node实现简单的增删改查接口实例代码
Aug 22 Javascript
手写Vue弹窗Modal的实现代码
Sep 11 Javascript
JavaScript代理模式原理与用法实例详解
Mar 10 Javascript
JavaScript enum枚举类型定义及使用方法
May 15 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判断当前用户已在别处登录的方法
2015/01/06 PHP
Yii调试查看执行SQL语句的方法
2016/07/15 PHP
PHP使用栈解决约瑟夫环问题算法示例
2017/08/27 PHP
安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题
2020/08/26 PHP
Javascript操作select方法大全[新增、修改、删除、选中、清空、判断存在等]
2008/09/26 Javascript
JavaScript 精粹读书笔记(1,2)
2010/02/07 Javascript
JQuery Ajax 跨域访问的解决方案
2010/03/12 Javascript
jQuery之字体大小的设置方法
2014/02/27 Javascript
js使用DOM设置单选按钮、复选框及下拉菜单的方法
2015/01/20 Javascript
原生js实现类似弹窗抖动效果
2015/04/02 Javascript
jquery衣服颜色选取插件效果代码分享
2015/08/28 Javascript
Bootstrap每天必学之按钮
2015/11/26 Javascript
js实现对ajax请求面向对象的封装
2016/01/08 Javascript
JavaScript的Backbone.js框架环境搭建及Hellow world示例
2016/05/07 Javascript
js弹出窗口返回值的简单实例
2016/05/28 Javascript
完美解决手机浏览器顶部下拉出现网页源或刷新的问题
2017/11/30 Javascript
详解Angular5 服务端渲染实战
2018/01/04 Javascript
Vue中使用方法、计算属性或观察者的方法实例详解
2018/10/31 Javascript
element vue validate验证名称重复 输入框与后台重复验证 特殊字符 字符长度 及注意事项小结【实例代码】
2018/11/20 Javascript
Python基于回溯法子集树模板解决野人与传教士问题示例
2017/09/11 Python
python正则表达式及使用正则表达式的例子
2018/01/22 Python
keras在构建LSTM模型时对变长序列的处理操作
2020/06/29 Python
美国时尚孕妇装品牌:A Pea in the Pod
2017/07/16 全球购物
世界上最具创新性的增强型知名运动品牌:Proviz
2018/04/03 全球购物
Probikekit欧盟:在线公路自行车专家
2019/07/12 全球购物
英智兴达软件测试笔试题
2016/10/12 面试题
如果重写了对象的equals()方法,需要考虑什么
2014/11/02 面试题
先进事迹报告会感言
2014/01/24 职场文书
企业军训感言
2014/02/08 职场文书
汽车销售员如何做职业生涯规划
2014/02/16 职场文书
浪费资源的建议书
2014/03/12 职场文书
2015年全国爱耳日活动总结
2015/02/27 职场文书
慈善募捐倡议书
2015/04/27 职场文书
人与自然观后感
2015/06/16 职场文书
2015大学生暑假调查报告
2015/07/13 职场文书
PyTorch 实现L2正则化以及Dropout的操作
2021/05/27 Python