Ajax请求 返回数据处理方法 JSON.parse( ) 与 eval( )的区别

Posted 一片生活枫叶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ajax请求 返回数据处理方法 JSON.parse( ) 与 eval( )的区别相关的知识,希望对你有一定的参考价值。


JSON.parse与eval和能将一个字符串解析成一个JSON对象,但还是有挺大区别。

测试代码


var A = "{  a: 1 , b : 'hello' }";

var B = "{  'a': 1 , 'b' : 'hello' }";

var C = "{'a':1,'b':'hello'}";

var D = '{"a":1,"b":"hello"}';

var E = '{ "a" : 1 , "b" : "hello" }';

var F = '{ "a" : 1 ,   "b" : "hello" }';

var G = '{ "a" : 1 , "b" : window.location.href="https://www.baidu.com" }';


JSON.parse 执行:

例:JSON.parse(A);

A、B、C、G都不可转,D、E、F都可以。


eval 执行:

例:eval("("+A+")");

A到G都可以转,特别到G时,页面还跳转到百度了。



JSON.parse

这方法只能解析属性名是双引号包裹的字符串对象,并会忽略换行和空格(值外面)。浏览器兼容:IE8+


Ajax请求 返回数据处理方法 JSON.parse( ) 与 eval( )的区别


eval ( )

不建议使用

eval函数可将一个javascript代码字符串求值成特定的对象,所以解析成JSON对象只不过是作用之一。

为什么eval()解析JSON字符串要加上括号?

原因是两点:

1. json对象是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理。


2. 加上圆括号为了处理字符串为表达式,而不是语句(statement)来执行。

例子:对象字面量 {},不加外层的括号,那么eval会识别为JS代码块的开始和结束标记,那么 {} 将会被认为是执行了一句空语句。



提 醒


虽然从演示例子看,eval的能力是强过于JSON.parse的,它可解析不规范的JSON字符串,但是G的例子也可以看出,eval是不安全的,特别是数据是第三方给予时候,你根本不知道eval之后它会干什么。

eval是强烈不建议用来解析JSON字符串,但是凡事无绝对,如果数据来源于你信任的并且格式也不大规范,那用它也不是不可以。


长按,识别二维码,加关注


以上是关于Ajax请求 返回数据处理方法 JSON.parse( ) 与 eval( )的区别的主要内容,如果未能解决你的问题,请参考以下文章

ajax 请求后台数据返回异常 及 提示404方法名不存在

Ajax请求返回Error:200无数据的解决方法

ajax请求的数据格式都有哪些?

jquery 多个ajax()请求。

使用ajax()方法加载服务器数据

2016-6-3Ajax异步复习