eval():
作用:它的作用是把对应的字符串解析成js代码并运行(将json的字符串解析成为JSON对象);
特点:它是一个全局函数;
缺点:1>在该函数内部申明的变量都是全局变量,且申明的变量不会提升;
2>耗性能,执行2次,一次解析成js语句,一次执行js代码;
举例:
1.对于服务器返回的JSON字符串,如果jquery异步请求没做类型说明,或者以字符串方式接受,那么需要做一次对象化处理,就是将字符串放到eval()函数中执行如下:
已知服务器返回JSON字符串集合:
var data="{
student:[
{name:'小明',age:17},
{name:'小红',age:16},
{name:'小鹏',age:18}
]
}";
var dataObj=eval("("+data+")");
注意:这里在data外添加"("+**+")"是由于json是以"{}"的方式包裹的,js会将以"{}"包裹的代码当成语句处理,所以在调用该函数的时候需要先强制性转换一种表达方式,
alert(eval("{}"); // return undefined;
alert(eval("({})");// return object[Object];
2..对于服务器返回的JSON字符串,如果jquery异步请求将type(一般为这个配置属性)设为“json”,或者利用$.getJSON()方法获得服务器返回,那么就不需要eval()方法了,因为这时候得到的结果已经是json对象了,只需直接调用该对象即可,这里以$.getJSON方法为例说明数据处理方法:
alert(dataObj.root.length);//输出root的子对象数量
$.each(dataObj.student,fucntion(idx,item){
if(idx==0){
return true;
}
//输出每个student子对象的名称和值
alert("name:"+item.name+",age:"+item.age);
})
注:对于一般的js生成json对象,只需要将$.each()方法替换为for语句即可,其他不变。
$.getJSON("http://www.phpstudent.cn/",{param:"gaoyusi"},function(data){
//此处返回的data已经是json对象
//以下其他操作同第一种情况
$.each(data.student,function(idx,item){
if(idx==0){
return true;//同countinue,返回false同break
}
alert("name:"+item.name+",age:"+item.age);
});
});
这里特别需要注意的是方式1中的eval()方法是动态执行其中字符串(可能是js脚本)的,这样很容易会造成系统的安全问题。