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 相关文章推荐
jQuery 行级解析读取XML文件(附源码)
Oct 12 Javascript
兼容多浏览器的iframe自适应高度(ie8 、谷歌浏览器4.0和 firefox3.5.3)
Nov 04 Javascript
jquery 实现窗口的最大化不论什么情况
Sep 03 Javascript
js计算字符串长度包含的中文是utf8格式
Oct 15 Javascript
js关于精确计算和数值格式化以及直接引js文件
Jan 28 Javascript
AngularJS模块管理问题的非常规处理方法
Apr 29 Javascript
详解JavaScript中Date.UTC()方法的使用
Jun 12 Javascript
JavaScript电子时钟倒计时第二款
Jan 10 Javascript
Angular的Bootstrap(引导)和Compiler(编译)机制
Jun 20 Javascript
Bootstrap插件全集
Jul 18 Javascript
探究react-native 源码的图片缓存问题
Aug 24 Javascript
Layui数据表格跳转到指定页的实现方法
Sep 05 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
古巴咖啡 Cubita琥爵咖啡 独特的加勒比海风味咖啡
2021/03/06 新手入门
require(),include(),require_once()和include_once()的异同
2007/01/02 PHP
PHP正则验证Email的方法
2015/06/15 PHP
php结合ajax实现手机发红包的案例
2016/10/13 PHP
laravel实现登录时监听事件,添加登录用户的记录方法
2019/09/30 PHP
goto语法在PHP中的使用教程
2020/09/17 PHP
jquery 元素相对定位代码
2010/10/15 Javascript
判断用户是否在线的代码
2011/03/05 Javascript
基于jQuery的简单九宫格实现代码
2012/08/09 Javascript
JS实现侧悬浮浮动实例代码
2013/11/29 Javascript
自编jQuery插件实现模拟alert和confirm
2014/09/01 Javascript
使用vue-router设置每个页面的title方法
2018/02/11 Javascript
vue单页缓存存在的问题及解决方案(小结)
2018/09/25 Javascript
jquery 验证用户名是否重复代码实例
2019/05/14 jQuery
javascript实现blob加密视频源地址的方法
2019/08/08 Javascript
JS中的算法与数据结构之队列(Queue)实例详解
2019/08/20 Javascript
Python入门篇之编程习惯与特点
2014/10/17 Python
python调用API实现智能回复机器人
2018/04/10 Python
Python生成指定数量的优惠码实操内容
2019/06/18 Python
通过字符串导入 Python 模块的方法详解
2019/10/27 Python
Python的形参和实参使用方式
2019/12/24 Python
浅谈keras使用预训练模型vgg16分类,损失和准确度不变
2020/07/02 Python
现代生活方式的家具和装饰:Dot & Bo
2018/12/26 全球购物
植村秀加拿大官网:Shu Uemura加拿大
2019/09/03 全球购物
简单介绍Object类的功能、常用方法
2013/10/02 面试题
几个数据库方面的面试题
2016/07/01 面试题
Linux不知道文件后缀名怎么判断文件类型
2014/08/21 面试题
what is the difference between ext2 and ext3
2015/08/25 面试题
实习教师个人的自我评价
2013/11/08 职场文书
军神教学反思
2014/02/04 职场文书
行政执法队伍作风整顿个人剖析材料
2014/10/11 职场文书
党员示范岗材料
2014/12/19 职场文书
爱国主义电影观后感
2015/06/18 职场文书
初中语文教学反思范文
2016/03/03 职场文书
商业计划书之服装
2019/09/09 职场文书
详解Java实现设计模式之责任链模式
2021/06/23 Java/Android