Web前端面試指導(三十七):eval是做什麼的?
阿新 • • 發佈:2019-01-22
題目點評
這題目的看起來比較簡單,但是總感覺有沒有那麼簡單,確實是這樣子。所以回答這個題目要從不同的角度去回答。首先回答清楚它是幹什麼的有什麼用,然後在談談它對作用域的影響,然後就是執行效率的問題,最後談談eval()的其它作用。這樣答下來自己都覺得滿意了吧!
eval()的作用
把字串引數解析成JS程式碼並執行,並返回執行的結果;
例如:
eval("2+3");//執行加運算,並返回運算值。
eval("varage=10");//宣告一個age變數
eval的作用域
functiona(){ eval("var x=1"); //等效於 var x=1; console.log(x); //輸出1 } a(); console.log(x);//錯誤 x沒有定義
說明作用域在它所有的範圍內容有效
示例2:
functiona(){
window.eval("var x=1"); // 等效於window.x=1;定義了全域性變數
console.log(x); //輸出1
}
a();
console.log(x);//輸出1
這段程式碼悲劇了?在IE8及IE8一下的版本就不支援了。
解決方法:
functiona(){ if(window.execScript){ // 支援IE8及以下的版本 window.execScript("var x=1"); } else{ //常用的瀏覽器都支援 window.eval("var x=1"); } console.log(x); } a(); console.log(x);
注意事項
應該避免使用eval,不安全,非常耗效能(2次,一次解析成js語句,一次執行)。
其它作用
由JSON字串轉換為JSON物件的時候可以用eval,例如:
varjson="{name:'Mr.CAO',age:30}";
varjsonObj=eval("("+json+")");
console.log(jsonObj);