
已解决问题
谷歌wangxu198447用户在2016.04.19提交了关于“巨型关公像深入浅析JSON.parse()、JSON.stringify()和eval()的作用详解”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2025-02-27T21:46:43。希望大家能够帮助她。详细问题描述及疑问:期待您的答案,你就是当代的活雷锋,太感谢了 !
详细问题描述及疑问:期待您的答案,你就是当代的活雷锋,太感谢了 !
“JSON(J**aScriptObjectNotation)是一种轻量级的**交换格式
今
(1)JSON.parse函数
作用:将J**aScript对象表示法(JSON)字符串转换为对象。
语法:JSON
参数:
text 必需。一个
reviver 可选。一个转换结果的函数。将为对象的每个成员
返回值:一个对象
example:
varjson='{"name":"GDT"(2)JSON.st
作用:将J**
语
参
value 必需,通常为需要转换的
r
space 可选。向返回值JSON文本添加缩进、空格和换行符以使其更
返回值:一
example:
varinfo={name:"GDT",age:,University:"GDUT"};varjson=JSON.stringify(info);//转换为JSON字符串document.write(json);//output为{"name":"GDT","age":23,"University":"GDUT"}(3)eval()函数
作用:eval()函数可计算某个字符串,并执行其中的的J**aScript代码。
语法:eval(string)
参数:
string 必需,要计算的字符串,其中含有要计算的J**aScript表达式或要执行的语句。
返回值:返回计算string的值,如果有的话(没有则不做任何改变返回)
example:
eval("x=;y=;document.write(x*y)");//output为document.write(eval("+")); //output为varx=;document.write(eval(x+)); //output为使用eval()函数也可以将JSON字符串解析为对象,这个功能能完成JSON.parse()的功能,但是有不一样的地方,请看下面代码
//JSON.parse()varjson='{"name":"GDT","age":,"University":"GDUT"}';varinfo=JSON.parse(json); //解析为JSON对象document.write(info);//output为[objectObject]//eval()varjson='{"name":"GDT","age":,"University":"GDUT"}';varinfo=eval('('+json+')');//解析为JSON对象document.write(info);//output为[objectObject]不知道大家有木有注意到eval()还要用一对圆括号将字符串包起来,对此我寻找到比较好的解释就是:
原因:归结于eval本身的问题,由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。
解决方法:加上圆括号的目的是迫使eval函数在处理J**aScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为J**aScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。请看下列例子的不同
alert(eval("{}"));//returnundefinedalert(eval('('+'{}'+')'));//returnobject[Object]另外,相对于写法格式严格的JSON.parse()来说,eval()可以解析任何字符串,eval是不安全的,因为eval比较宽松,会有潜在的安全性问题。比如以下代码:
varstr='{"a":"b"}';document.write(eval("("+str+")"));//正常解析为对象varstr='{"a":(function(){alert("Icandosomethingbad!");})()}';eval('('+str+')');//可以用来执行木马脚本如果用恶意用户在json字符串中注入了向页面插入木马链接的脚本,用eval也是可以操作的,而用JSON.parse()则不必担心这个问题,可见,虽然eval()功能很强大,但是实际用到的机会并不多。
个人总结的时候到了,这是我人生第一篇的博客,在4月1号Fool'sDay诞生,写得不好的地方还希望各位多多见谅,现在技术非常渣,我很希望现在能够一点一滴去积累知识,为日后的成功奠定好基础,fighting~