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 确定css方框模型(盒模型Box Model)
Jan 22 Javascript
javascript避免数字计算精度误差的方法详解
Mar 05 Javascript
AngularJS入门教程之Hello World!
Dec 06 Javascript
使用AngularJS实现表单向导的方法
Jun 19 Javascript
JS实现上下左右对称的九九乘法表
Feb 22 Javascript
Html5+jQuery+CSS制作相册小记录
Dec 30 Javascript
纯JS实现图片验证码功能并兼容IE6-8(推荐)
Apr 19 Javascript
vue-axios使用详解
May 10 Javascript
Bootstrap滚动监听组件scrollspy.js使用方法详解
Jul 20 Javascript
Vue 中使用vue2-highcharts实现top功能的示例
Mar 05 Javascript
vue App.vue中的公共组件改变值触发其他组件或.vue页面监听
May 31 Javascript
JS实现分页导航效果
Feb 19 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
浅析SVN常见问题及解决方法
2013/06/21 PHP
php中引用符号(&)的使用详解
2013/11/13 PHP
php实现复制移动文件的方法
2015/07/29 PHP
ThinkPHP中limit()使用方法详解
2016/04/19 PHP
php use和include区别总结
2019/10/13 PHP
Ctrl+Enter提交内容信息
2006/06/26 Javascript
jQuery 各种浏览器下获得日期区别
2008/12/22 Javascript
js模拟类继承小例子
2010/07/17 Javascript
基于JavaScript实现继承机制之构造函数+原型链混合方式的使用详解
2013/05/07 Javascript
Javascript 遮罩层和加载效果代码
2013/08/01 Javascript
用JS在浏览器中创建下载文件
2014/03/05 Javascript
js跨域问题浅析及解决方法优缺点对比
2014/11/08 Javascript
jQuery中的通配符选择器使用总结
2016/05/30 Javascript
详解照片瀑布流效果(js,jquery分别实现与知识点总结)
2017/01/01 Javascript
详解基于webpack和vue.js搭建开发环境
2017/04/05 Javascript
JavaScript实现隐藏省略文字效果的方法
2017/04/27 Javascript
JS数组扁平化(flat)方法总结详解
2019/06/24 Javascript
vue 父组件通过$refs获取子组件的值和方法详解
2019/11/07 Javascript
[04:56]经典回顾:前Ehome 与 前LGD
2015/02/26 DOTA
python读取目录下最新的文件夹方法
2018/12/24 Python
python中import与from方法总结(推荐)
2019/03/21 Python
python使用thrift教程的方法示例
2019/03/21 Python
python高阶函数map()和reduce()实例解析
2020/03/16 Python
canvas画图被放大且模糊的解决方法
2020/08/11 HTML / CSS
Super-Pharm波兰:药房和香水在一个地方
2020/08/18 全球购物
武汉世纪畅想数字传播有限公司.NET笔试题
2014/07/22 面试题
提高EJB性能都有哪些技巧
2012/03/25 面试题
《雕塑之美》教学反思
2014/04/24 职场文书
大学生联谊活动策划书(光棍节)
2014/10/10 职场文书
2014年管理工作总结
2014/11/22 职场文书
先进个人事迹材料范文
2014/12/30 职场文书
离婚案件上诉状
2015/05/23 职场文书
总结会主持词
2015/07/02 职场文书
CSS中实现动画效果-附案例
2022/02/28 HTML / CSS
日本官方排名前10的动漫,名侦探柯南上榜,第一是一部创造历史的动漫
2022/03/18 日漫
在容器中使用nginx搭建上传下载服务器
2022/05/11 Servers