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