eval簡介
---eval在ECMA定義中是全域物件原型的方法;
---eval接受的參數是字串格式的js程式碼, 將由執行引擎(記得'高級程式設計'還是哪說過, 此時新建一個執行引擎)執行這段字串, 然後返回結果到eval調用的位置.
<!DOCTYPE html> <html> <head> <title>eval学习</title> <script type="text/javascript"> /* eval("表达式");执行表达式语句 eval("("+javascript类型+")");转为javascript对象 */ var jsonObj={"name":"ljl","data":123};//json,是javascript的对象 var jsonString='{"name":"ljl","data":123}';//javascript的string类型,字符串内容符合json格式的样式 var objType=eval("("+jsonString+")");//通过eval函数将json字符转为javascript对象 alert( typeof jsonString);//string alert( typeof objType);//obj alert(eval(123));//123 alert(typeof eval("("+123+")"));//number var x=2; var y=eval('x+1');//执行 2+1 表达式 alert('y= '+y);//3 </script> </head> <body> </body> </html>
補充:總結
eval是js動態特性之一, 透過它直接執行js程式並回傳結果, 常見的使用就是還原json資料為js物件;
但是由於其能在運行時動態改變上下文物件, 因此帶來了注入攻擊的風險;
使用時, 注意eval對字串的語法認識是如何的, 常見的就是'大括號'問題