- 在前台代码中如果要使用文本进行数据传输,依靠的一定是文本数据,可是对于文本数据的解析需要使用eval()函数处理,但是这个函数有bug,非常严重的bug.
- 观察eval()函数的使用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Javascript_json</title>
<script type="text/javascript" charset="utf-8">
window.onload = function () {
var num = 10;
var jsonText = "{\"count\":++num}";
//解析jsontext文本
var jsonObj = eval("("+jsonText+")");
//调用json中的count函数
alert(jsonObj.count);
}
</script>
</head>
<body>
</body>
</html>
- 运行结果
-
此时使用eval()函数之后可以清楚的发现两个问题
- eval()的函数每次编写都要协商"()",
- 如果eval()函数处理之后,如果文本数据包含有程序代码,则程序代码会执行,存在有安全隐患问题.
-
所以在JSON操作的标准上,又提供了一个自己的JavaScript开发工具文件
-
将js文件放入到项目中,然后在网页中导入
<script type="text/javascript" src="/js/json.js" charset="UTF-8"></script>
- 使用JSON中的parse()方法代替原有的eval()函数
<script type="text/javascript" charset="utf-8">
window.onload = function () {
var num = 10;
var jsonText = "{\"count\":++num}";
try {
//解析jsontext文本
var jsonObj = JSON.parse(jsonText);
//调用json中的count函数
alert(jsonObj.count);
}catch(e){
alert(e);
}
}
</script>
- 执行结果
- JSON.parse()和eval()函数的区别?
- JavaScript中奖JSON文本转换为JSON对象的只有eval()函数,如果直接使用eval()函数进行转换,则需要在文本上添加"()",如果文本中包含有程序内容则会直接执行程序代码.
- JSON.parse()是JavaScript提供的一个工具类,这个工具类封装了eval()函数操作,如果文本中包含有程序代码,则会抛出异常,如果文本没有问题,则会自动在文本上添加"()"括号之后,执行eval()函数