您的位置:首页 > Web前端 > JavaScript

js中eval()和$.parse()的区别以及JSON.stringify()

2018-02-05 13:55 771 查看
1. JSON.parse(jsonString)和eval(jsonString): 在一个字符串中解析出JSON对象

var str = '[{"href":"baidu.com","text":"test","orgId":123,"dataType":"curry","activeClass":"haha"}]'; JSON.parse(str);

结果:



区别一:安全性

JSON.parse()可以解析json格式的数据,并且会对要解析的字符串进行格式检查,如果格式不正确则不进行解析,

而eval()则可以解析任何字符串,eval是不安全的.


区别二:格式严格性


   JSON.parse()解析的必须是json格式的字符串要不报错,而eval()则没有这么严格

   在这里“json格式的字符串”是指要求指定的字符串必须符合严格的JSON格式,例如:属性名称必须加双引号、字符串值也必须用双引号。

   如果传入一个格式不"完好"的JSON字符串将抛出一个JS异常

    json的解析方法共有两种:eval 和 JSON.parse(),如:

   

[javascript] view
plain copy

var jsonStr= '{"name":"lulu", "sex":"female"}';  

var evalJson=eval('('+jsonStr+')');  

var jsonParseJson=JSON.parse(jsonStr);  

这样就把json格式的字符串jsonStr转换成了JSON对象。

但是区别是:

[javascript] view
plain copy

var age = 27;  

var jsonStr= '{"name":"lulu", "sex":"female","age":++age}';  

var evalJson=eval('('+jsonStr+')'); //不报错此时age的值是28  

var jsonParseJson=JSON.parse(jsonStr);//报错 

 注意:某些低级的浏览器尚不支持JSON.parse()

   《高性能Javascript》一书即指出:警告:关于JSON和eval需要注意的是:在代码中使用eval是很危险的,特别是用它执行第三方的JSON数据(其中可能包含恶意代码)时,尽可能使用JSON.parse()方法解析字符串本身。该方法可以捕捉JSON中的语法错误,并允许你传入一个函数,用来过滤或转换解析结果。如果此方法以备Firfox 3.5 、IE8 及 Safari 4 原生支持。大多数javascript类库包含的JSON解析代码会直接调用原生版本,如果没有原生支持的话,会调用一个略微不那么强大的非原生版本来处理。

2. JSON.stringify(obj) : 将一个JSON对象转换成字符串

var obj = [{"href":"baidu.com","text":"test","orgId":123,"dataType":"curry","activeClass":"haha"}]; JSON.stringify(obj);

结果:

"[{"href":"baidu.com","text":"test","orgId":123,"dataType":"curry","activeClass":"haha"}]"

json 字符串和对象的相互转换
JSON.parse( ) 字符串转化为对象

JSON.stringify( ) 对象转还未字符串
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: