eval()和json.parse()的区别

来源:互联网 发布:ubuntu开机自启动mongo 编辑:程序博客网 时间:2024/06/09 18:22

我们很多时候都会使用ajax技术从后端和获取想要的数据去渲染页面,而我们解析从后台传来的json对象有两种方法:eval(),JSON.parse()

假设我们现在有一个json格式的字符串:

{    "people" : [        {"name":"张三","age":11},         {"name":"李四","age":11},        {"name":"王五","age":11}    ]}
接下来,我们用这两种方法将它解析成json对象:

第一种方式:eval();

var  data='{"student":[{"name":"张三","age":"11"},{"name":"李四","age":"11"},{"name":"王五","age":"11"}]}’;

eval(’(“+data+”)’);

第二种方式:JSON.parse();

var  data='{"student":[{"name":"张三","age":"11"},{"name":"李四","age":"11"},{"name":"王五","age":"11"}]}’;

JSON.parse(data);

区别:eval方法不会去检查给的字符串时候符合json的格式~同时如果给的字符串中存在js代码eval也会一并执行~比如:

var  data='{"student":[{"name":"张三","age":"11"},{"name":"李四","age":"alert(11)"},{"name":"王五","age":"11"}]}’;

此时执行eval方法后会先弹出一个提示框输出11的字符串;

这时候使用JSON.parse()就会报错,显示错误信息为当前字符串不符合json格式;即JSON.parse()方法会检查需要转换的字符串是否符合json格式.

相比而言eval方法是很不安全,特别是当涉及到第三方时我们需要确保传给eval的参数是我们可以控制的,不然里面插入比如window.location~指向一个恶意的连接

总的来说,还是推荐使用JSON.parse来实现json格式字符串的解析。