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压缩混淆工具
May 16 Javascript
从父页面读取和操作iframe中内容方法
Jul 25 Javascript
jquery 插件开发方法小结
Oct 23 Javascript
textarea中的手动换行处理的jquery代码
Feb 26 Javascript
javascript date格式化示例
Sep 25 Javascript
IE下双击checkbox反应延迟问题的解决方法
Mar 27 Javascript
在页面加载完成后通过jquery给多个span赋值
May 21 Javascript
Node.js下自定义错误类型详解
Oct 17 Javascript
基于Three.js插件制作360度全景图
Nov 29 Javascript
基于Vue+elementUI实现动态表单的校验功能(根据条件动态切换校验格式)
Apr 04 Javascript
vue实现手机号码的校验实例代码(防抖函数的应用场景)
Sep 05 Javascript
jQuery是用来干什么的 jquery其实就是一个js框架
Feb 04 jQuery
新手快速学习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 SESSION的增加、删除、修改、查看操作
2015/03/20 PHP
php使用ob_flush不能每隔一秒输出原理分析
2015/06/02 PHP
php-redis中的sort排序函数总结
2015/07/08 PHP
彻底搞懂PHP 变量结构体
2017/10/11 PHP
PHPTree――php快速生成无限级分类
2018/03/30 PHP
获取当前网页document.url location.href区别总结
2008/05/10 Javascript
javascript函数中的arguments参数
2010/08/01 Javascript
url地址自动加#号问题说明
2010/08/21 Javascript
40款非常棒的jQuery 插件和制作教程(系列二)
2011/11/02 Javascript
Jquery Validate 正则表达式实用验证代码大全
2013/08/23 Javascript
jquery validate添加自定义验证规则(验证邮箱 邮政编码)
2013/12/04 Javascript
jQuery中toggle()函数的使用实例
2015/04/17 Javascript
jQuery web 组件 后台日历价格、库存设置的代码
2016/10/14 Javascript
详解jQuery的Cookie插件
2016/11/23 Javascript
超全面的JavaScript开发规范(推荐)
2017/01/21 Javascript
详解angularJS自定义指令间的相互交互
2017/07/05 Javascript
vue中添加mp3音频文件的方法
2018/03/02 Javascript
微信小程序 下拉刷新及上拉加载原理解析
2019/11/06 Javascript
jQuery实现弹出层效果
2019/12/10 jQuery
Vue2.x-使用防抖以及节流的示例
2021/03/02 Vue.js
Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程
2016/06/14 Python
详解如何用OpenCV + Python 实现人脸识别
2017/10/20 Python
Python3中的列表,元组,字典,字符串相关知识小结
2017/11/10 Python
python 判断参数为Nonetype类型或空的实例
2018/10/30 Python
python获取时间及时间格式转换问题实例代码详解
2018/12/06 Python
Python实现八皇后问题示例代码
2018/12/09 Python
巴西食品补充剂在线零售商:Músculos na Web
2017/08/07 全球购物
俄罗斯极限运动网上商店:Board Shop №1
2020/12/18 全球购物
extern是什么意思
2016/03/10 面试题
检察官就职演讲稿
2014/01/13 职场文书
个人四风问题对照检查材料
2014/09/26 职场文书
演讲开头怎么书写?
2019/08/06 职场文书
盘点2020年适合农村地区创业的项目
2019/10/16 职场文书
《追风筝的人》:人心中的成见是座大山,但请不忘初心
2019/11/15 职场文书
教你用Java Swing实现自助取款机系统
2021/06/11 Java/Android
vue 实现弹窗关闭后刷新效果
2022/04/08 Vue.js