JavaScript解析字符串方法eval()和JSON.parse()的区别

阅读() @2019-03-17 16:05:18

前端开发利用jquery执行ajax操作或者是angular、vue等框架从后台获取数据时,后台有时会返回一个json格式的字符串,这个时候我们需要解析为正规的json格式才能使用,而解析的方法有2种:

1、eval():

var data = '{"person" : [{"name":"zym","age":23}, {"name":"zyy","age":24},{"name":"mhy","age":25}]}';
console.log(eval('(' + data + ')'));

2、JSON.parse():

var data = '{"person" : [{"name":"zym","age":23}, {"name":"zyy","age":24},{"name":"mhy","age":25}]}';
console.log(JSON.parse(data));

以上两种方法都可以将json格式的字符串转为json对象,但是有一个很重要的区别如下:

eval方法不会去检查给的字符串是否符合json的格式,同时如果给的字符串中存在js代码eval也会一并执行~比如如果上面的json格式的字符串改为:(注意红色部分):

var data = '{"person" : [{"name":"zym","age":23}, {"name":"zyy","age":alert("haha")},{"name":"mhy","age":25}]}';
console.log(eval(data));

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

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

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

从这个层面讲~还是推荐使用JSON.parse来实现json格式字符串的解析。

微信二维码