說道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代碼塊的開始和結束標記,
那麼{}將會被認爲是執行了一句空語句。因此下面兩個執行結果是不一樣的:
4、eval很強大,可是一樣也有弊端
(1)eval方法是在運行時對腳本進行解釋執行,而普通的javascript會有一個預處理的過程。
(2)eval一般用在一些須要動態執行字符串,或將字符串轉爲javascript對象的場景,好比將json字符串轉爲javascript對象。)
(3)安全隱患
雖然 eval() 的功能很是強大,但在實際使用中用到它的狀況並很少《結束》