Ajax中解析Json的两种方法对比分析


Posted in Javascript onJune 25, 2015

eval();  //此方法不推荐

JSON.parse();  //推荐方法

一、两种方法的区别

我们先初始化一个json格式的对象:

var jsonDate = '{ "name":"周星驰","age":23 }'


var jsonObj = eval( '(' + jsonDate + ')' ); // eval();方法


var jsonObj = JSON.parse( jsonDate ); // JSON.parse(); 方法

然后在控制台调用:

console.log( jsonObj.name );  // 两种方法都可以正确输入 周星驰

那么问题来了 两种方法有什么区别呢?(下面我们稍微把代码改动一下,蓝色字体为修改部分)

var jsonDate = '{ "name":alert("hello"),"age":23 }'


var jsonObj = eval( '(' + jsonDate + ')' ); // eval();方法


console.log( jsonObj.age ); //会先执行“alert”输出“hello” 然后才输出 23

换“JSON.parse();”方法:

var jsonDate = '{ "name":alert("hello"),"age":23 }'


var jsonObj = JSON.parse( jsonDate ); // JSON.parse(); 方法


cosole.log( jsonobj.age ) // 报错 这个错误告诉我们这个字符串是不合法的

小结:“eval();”方法解析的时候不会去判断字符串是否合法,而且json对象中的js方法也会被执行,这是非常危险的;而“JSON.parse();”方法的优点就不用多说了,推荐此方法。(不明白的盆友可以自己在控制台测试一下)

二、扩展问题

var jsonDate = '{ "name":"周星驰","age":23 }'

大家可以看到在上面测试时一直用红色把包在花括号外面的引号标注了起来,这对引号是很关键却又是常常被忽略的,因为 “eval();” 和 “JSON.parser();” 这两个方法的参数只接受字符串,也就是说只能解析字符串!!

那我不经会有一个思考,我们在初始化的时候若不加引号对,那么它本身就是对象,js可以直接获取对象本身的属性和方法;为什么还要加引号将它变成字符串之后再用 “eval();” 或者 “JSON.parse();” 解析,这样做不是既不环保又没有效率吗?

原因很简单:前端提供给后台的只能是字符串数据格式,后台返回给前台的就看返回的是什么数据格式,是字符串就必须解析之后再用。

(这个小问题一般大家都会忽略掉,不太关注。我之所以好奇的原因也是因为对后台了解的不够,把这个问题抛出来希望对后台不熟的朋友有所帮助,知道是怎么回事后自然而然会加深记忆,在开发过程中就不会漏掉了)

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
javascript基本语法分析说明
Jun 15 Javascript
jquery使用正则表达式验证email地址的方法
Jan 22 Javascript
javascript去除空格方法小结
May 21 Javascript
基于jquery实现页面滚动到底自动加载数据的功能
Dec 19 Javascript
js前端面试题及答案整理(一)
Aug 26 Javascript
自己封装的一个简单的倒计时功能实例
Nov 23 Javascript
javascript实现秒表计时器的制作方法
Feb 16 Javascript
微信小程序 上传头像的实例详解
Oct 27 Javascript
微信小程序项目实践之验证码倒计时功能
Jul 18 Javascript
vue.js+ElementUI实现进度条提示密码强度效果
Jan 18 Javascript
js实现时钟定时器
Mar 26 Javascript
从0到1学习JavaScript编写贪吃蛇游戏
Jul 28 Javascript
新手快速学习JavaScript免费教程资源汇总
Jun 25 #Javascript
JavaScript中字符串(string)转json的2种方法
Jun 25 #Javascript
深入理解JavaScript编程中的原型概念
Jun 25 #Javascript
Backbone.js 0.9.2 源码注释中文翻译版
Jun 25 #Javascript
在JavaScript应用中实现延迟加载的方法
Jun 25 #Javascript
Underscore.js 1.3.3 中文注释翻译说明
Jun 25 #Javascript
深入分析JSON编码格式提交表单数据
Jun 25 #Javascript
You might like
php输出表格的实现代码(修正版)
2010/12/29 PHP
php从memcache读取数据再批量写入mysql的方法
2014/12/29 PHP
php 在线导入mysql大数据程序
2015/06/11 PHP
php登录超时检测功能实例详解
2017/03/21 PHP
Laravel配合jwt使用的方法实例
2020/10/25 PHP
JavaScript Distilled 基础知识与函数
2010/04/07 Javascript
ScrollDown的基本操作示例
2013/06/09 Javascript
JavaScript indexOf方法入门实例(计算指定字符在字符串中首次出现的位置)
2014/10/17 Javascript
JavaScript检测实例属性, 原型属性
2015/02/04 Javascript
javaScript中的原型解析【推荐】
2016/05/05 Javascript
js学习之----深入理解闭包
2016/11/21 Javascript
jQuery密码强度验证控件使用详解
2017/01/05 Javascript
从零开始学习Node.js系列教程二:文本提交与显示方法
2017/04/13 Javascript
JavaScript通过改变文字透明度实现的文字闪烁效果实例
2017/04/27 Javascript
IntersectionObserver实现图片懒加载的示例
2017/09/29 Javascript
JavaScript模块模式实例详解
2017/10/25 Javascript
vue渲染时闪烁{{}}的问题及解决方法
2018/03/28 Javascript
nodejs更改项目端口号的方法
2018/05/13 NodeJs
JS+HTML5实现获取手机验证码倒计时按钮
2018/08/08 Javascript
手把手带你封装一个vue component第三方库
2019/02/14 Javascript
WEEX环境搭建与入门详解
2019/10/16 Javascript
原生js实现二级联动菜单
2019/11/27 Javascript
Angular8 实现table表格表头固定效果
2020/01/03 Javascript
vue ssr+koa2构建服务端渲染的示例代码
2020/03/23 Javascript
Vue 使用iframe引用html页面实现vue和html页面方法的调用操作
2020/11/16 Javascript
Python设计模式编程中解释器模式的简单程序示例分享
2016/03/02 Python
Python matplotlib 画图窗口显示到gui或者控制台的实例
2018/05/24 Python
python与pycharm有何区别
2020/07/01 Python
经贸日语毕业生自荐信
2013/11/03 职场文书
竞选生活委员演讲稿
2014/04/28 职场文书
小学生2014国庆节演讲稿:祖国在我心中
2014/09/21 职场文书
离婚民事起诉状
2015/08/03 职场文书
婚礼必备主持词范本!
2019/07/23 职场文书
导游词之嵊泗列岛
2019/10/30 职场文书
关于Oracle12C默认用户名system密码不正确的解决方案
2021/10/16 Oracle
Redis主从复制操作和配置详情
2022/09/23 Redis