JSON.stringify()、eval(),JSON.parse()各自的区别于作用
JSON.stringify(value [,replacer] [,space])
必需。要转换的 JavaScript 值(通常为对象或数组)。 可选。用于转换结果的函数或数组。 如果replacer为函数,则JSON.stringify将调用该函数,并传入每个成员的键和值。使用返回值而不是原始值。如果此函数返回undefined,则排除成员。根对象的键是一个空字符串:""。 如果replacer是一个数组,则仅转换该数组中具有键值的成员。成员的转换顺序与键在数组中的顺序一样。当value参数也为数组时,将忽略replacer数组。 可选。向返回值 JSON 文本添加缩进、空格和换行符以使其更易于读取。 如果省略space,则将生成返回值文本,而没有任何额外空格。 如果space是一个数字,则返回值文本在每个级别缩进指定数目的空格。如果space大于 10,则文本缩进 10 个空格。 如果space是一个非空字符串(例如“t”),则返回值文本在每个级别中缩进字符串中的字符。 如果space是长度大于 10 个字符的字符串,则使用前 10 个字符。 返回一个包含 JSON 文本的字符串。
JSON.stringify()、eval()都是用来解析字符串并将字符串转换为json数据
var jsonData = '{"data1":"Hello,", var evalJson=eval('('+jsonData+')'); 加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行 var jsonParseJson=JSON.parse(jsonData); 这样就把json格式的字符串转化为json对象但二者解析是由区别的
var value = 1; var jsonstr = '{"data1":"hello","data2":++value}'; var data1 = eval_r('('+jsonstr+')');console.log(data1);//这时value值为2 而var data2=JSON.parse(jsonstr);console.log(data2);//报错 总结:eval在解析字符串时,会执行该字符串中的代码(这样的后果是相当恶劣的), 如上例中,由于用eval解析一个json字符串而造成原先的value的值改变这是极其不安全的, 很容易被恶意的用户在json字符串注入木马链接。 所以推荐使用JSON.parse()来解析字符串。 该方法不仅可以捕捉JSON中的语法错误,并且允许你传入一个函数,用来过滤或转换解析结果 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |