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.AutoComplete.js中文修正版(支持firefox)
Apr 09 Javascript
js 兼容多浏览器的回车和鼠标焦点事件代码(IE6/7/8,firefox,chrome)
Apr 14 Javascript
jquery 事件对象属性小结
Apr 27 Javascript
jQuery中extend函数的实现原理详解
Feb 03 Javascript
JS实现的简单表单验证功能示例
Oct 13 Javascript
使用ef6创建oracle数据库的实体模型遇到的问题及解决方案
Nov 09 Javascript
Bootstrap Table 搜索框和查询功能
Nov 30 Javascript
react配合antd组件实现的管理系统示例代码
Apr 24 Javascript
JS面向对象的程序设计相关知识小结
May 26 Javascript
vue history 模式打包部署在域名的二级目录的配置指南
Jul 02 Javascript
JS Ajax请求会话过期处理问题解决方法分析
Nov 16 Javascript
Element Breadcrumb 面包屑的使用方法
Jul 26 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面向对象全攻略 (十七) 自动加载类
2009/09/30 PHP
php合并js请求的例子
2013/11/01 PHP
浅谈php扩展imagick
2014/06/02 PHP
smarty内部日期函数html_select_date()用法实例分析
2015/07/08 PHP
php 根据自增id创建唯一编号类
2017/04/06 PHP
Windows下php+mysql5.7配置教程
2017/05/16 PHP
PHP让网站移动访问更加友好方法
2019/02/14 PHP
JS Jquery 遍历,筛选页面元素 自动完成(实现代码)
2013/07/08 Javascript
js处理json以及字符串的比较等常用操作
2013/09/08 Javascript
css3元素简单的闪烁效果实现(html5 jquery)
2013/12/28 Javascript
深入理解javascript中return的作用
2013/12/30 Javascript
jQuery scroll事件实现监控滚动条分页示例
2014/04/04 Javascript
javascript中clipboardData对象用法详解
2015/05/13 Javascript
js实现TAB切换对应不同颜色的代码
2015/08/31 Javascript
简单的网页广告特效实例
2017/08/19 Javascript
JS鼠标3次点击事件实现代码及扩展思路
2017/09/12 Javascript
Angular4实现图片上传预览路径不安全的问题解决
2017/12/25 Javascript
浅析JS中回调函数及用法
2018/07/25 Javascript
详解小程序不同页面之间通讯的解决方案
2018/11/23 Javascript
Vue export import 导入导出的多种方式与区别介绍
2020/02/12 Javascript
JS实现烟花爆炸效果
2020/03/10 Javascript
vue动态渲染svg、添加点击事件的实现
2020/03/13 Javascript
解决vue项目运行提示Warnings while compiling.警告的问题
2020/09/18 Javascript
python中os模块详解
2016/10/14 Python
python 判断矩阵中每行非零个数的方法
2019/01/26 Python
python3 pygame实现接小球游戏
2019/05/14 Python
升级keras解决load_weights()中的未定义skip_mismatch关键字问题
2020/06/12 Python
python之pygame模块实现飞机大战完整代码
2020/11/29 Python
filter使用python3代码进行迭代元素的实例详解
2020/12/03 Python
CSS3弹性盒模型flex box快速入门心得(必看篇)
2016/05/24 HTML / CSS
新闻编辑专业自荐信
2014/07/02 职场文书
2014年高二班主任工作总结
2014/12/16 职场文书
2015年党员个人剖析材料
2014/12/18 职场文书
环卫工作个人总结
2015/03/04 职场文书
离婚民事起诉状
2015/08/03 职场文书
Linux安装apache服务器的配置过程
2021/11/27 Servers