深入浅析JSON.parse()、JSON.stringify()和eval()的作用详解

深入浅析JSON.parse()、JSON.stringify()和eval()的作用详解

(1)JSON.parse 函数

    将JSON字符串转换为对象

(2)JSON.stringify()函数

    将 JavaScript 值转换为JSON字符串

(3)eval()函数

    作用:eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。

    语法:eval(string)

    参数:string 必需,要计算的字符串,其中含有要计算的 JavaScript 表达式或要执行的语句

    使用eval()函数也可以将JSON字符串解析为对象,这个功能能完成JSON.parse()的功能,但是有不一样的地方,请看下面代码

// JSON.parse()
var json = '{"name":"GDT","age":,"University":"GDUT"}';
var info = JSON.parse(json);    //解析为JSON对象
document.write(info); //output为[object Object]
//eval()
var json = '{"name":"GDT","age":,"University":"GDUT"}';
var info = eval('(' + json + ')'); //解析为JSON对象
document.write(info); //output为[object Object]

eval()还要用一对圆括号将字符串包起来,

原因:归结于eval本身的问题,由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式

解决方法:加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象而不是作为语句(statement)来执行。举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。请看下列例子的不同

alert(eval("{}")); // return undefined
alert(eval('('+'{}'+')')); // return object[Object]

BUT 如果恶意用户在json字符串中注入了向页面插入木马链接的脚本,用eval是可以操作的,而用JSON.parse()则不必担心这个问题。

 

posted @ 2022-04-24 16:43  霓裳依旧  阅读(279)  评论(0编辑  收藏  举报