eval函数的特色和做用

eval():php

  做用:它的做用是把对应的字符串解析成js代码并运行(将json的字符串解析成为JSON对象);jquery

  特色:它是一个全局函数;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脚本)的,这样很容易会形成系统的安全问题。

相关文章
相关标签/搜索