JS中的eval 為什么加括號

字號:


    JS中的eval 為什么加括號呢?相信很多朋友都不是很清楚吧,下面小編通過本教程幫助大家學習JS中的eval 為什么加括號,感興趣的朋友了解下吧
    eval簡介
    ---eval在ECMA定義中是全局對象原型的方法;
    ---eval接受的參數(shù)是字符串格式的js代碼, 將由執(zhí)行引擎(記得'高級程序設計'還是哪說過, 此時新建一個執(zhí)行引擎)執(zhí)行這段字符串, 然后返回結果到eval調(diào)用的位置.
    <!DOCTYPE html>
    <html>
    <head>
    <title>eval學習</title>
    <script type="text/javascript">
    /*
    eval("表達式");執(zhí)行表達式語句
    eval("("+javascript類型+")");轉為javascript對象
    */
    var jsonObj={"name":"ljl","data":123};//json,是javascript的對象
    var jsonString='{"name":"ljl","data":123}';//javascript的string類型,字符串內(nèi)容符合json格式的樣式
    var objType=eval("("+jsonString+")");//通過eval函數(shù)將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');//執(zhí)行 2+1 表達式
    alert('y= '+y);//3
    </script>
    </head> 
    <body>
    </body>
    </html>
    補充:總結
    eval是js動態(tài)特性之一, 通過它直接執(zhí)行js程序并返回結果, 常見的使用就是還原json數(shù)據(jù)為js對象;
    但是由于其能在運行時動態(tài)改變上下文對象, 因此帶來了注入攻擊的風險;
    使用時, 注意eval對字符串的語法認識是如何的, 常見的就是'大括號'問題