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腳本)的,這樣很容易會形成系統的安全問題。

相關文章
相關標籤/搜索