Eval函數知識總結

說道Json,咱們先來聊聊evaljavascript

1、eval是什麼?(解析器)java

eval是一個函數,看本質function  eval() { [native code] }express

 

2、怎樣使用eval?json

   語法:string 必需。要計算的字符串其中含有要計算的 JavaScript 表達式或要執行的語句。經過計算 string 獲得的值(若是有的話)安全

    該方法只接受原始字符串做爲參數,只接受一個參數函數

    若是 string 參數不是原始字符串,那麼該方法將不做任何改變地返回。spa

     所以請不要爲 eval() 函數傳遞 String 對象來做爲參數。而應該是對象code

    若是參數中沒有合法的表達式和語句,則拋出 SyntaxError 異常。對象

     若是非法調用 eval(),則拋出 EvalError 異常。ip

    若是傳遞給 eval() 的 Javascript 代碼生成了一個異常,eval() 將把該異常傳遞給調用者。

第一個例子: console.log(eval("1212")); //輸出結果爲1212;

第二個例子:  var msg="hello worle";
                   eval("alert(msg)");//  輸出:hello world 傳入參數當作實際的ECMAScript語句來執行;

                   至關於:alert(msg);

第三個例子:eval定義一個函數;

                  eval("function sayHi(){alert('hello wold')}");

                 sayHi();           //輸出的結果是hello world  (運行機制:在解析代碼的時候,它們包含在一個字符串中,它們只在eval()執行的時候的建立)

3、eval(」(執行的內容)」);加上圓括號的目的是迫使eval函數在運行JavaScript代碼的時候強制將括號內的表達式轉化爲對象,而不是做爲語句(statement)來執行

例如對象字面量{},如若不加外層的括號,eval會將大括號識別爲JavaScript代碼塊的開始和結束標記,

那麼{}將會被認爲是執行了一句空語句。因此下面兩個執行結果是不一樣的:

eval('{}'); //undefined   JavaScript代碼塊的開始和結束標記  那麼{}將會被認爲是執行了一句空語句
console.log(eval('({})')); //object(){}  eval函數在評估JavaScript代碼的時候強制將括號內的表達式(expression)轉化爲對象,而不是做爲語句(statement)來執行

4、eval很強大,可是一樣也有弊端

 (1)eval方法是在運行時對腳本進行解釋執行,而普通的javascript會有一個預處理的過程。

  (2)eval一般用在一些須要動態執行字符串,或將字符串轉爲javascript對象的場景,好比將json字符串轉爲javascript對象。)

  (3)安全隱患

 雖然 eval() 的功能很是強大,但在實際使用中用到它的狀況並很少《結束》
相關文章
相關標籤/搜索