eval()函式用法詳解

antzone發表於2017-04-10

此函式的作用就是把一段字串傳遞給javascript直譯器,由直譯器將這段字串解釋成javascript程式碼,並且執行它。

語法結構: 

[JavaScript] 純文字檢視 複製程式碼
eval(string)

引數解析:

string:必需,要計算的字串,其中含有要計算的javascript表示式或要執行的語句。

最後返回通過計算string得到的值(如果有的話)。

該方法只接受原始字串作為引數,如果 string 引數不是原始字串,那麼該方法將不作任何改變地返回。因此請不要為 eval() 函式傳遞 String 物件來作為引數。

報錯的幾種情況:

(1).如果試圖覆蓋eval屬性或把它賦予另一個屬性,並通過該屬性呼叫它,則丟擲一個EvalError異常。

(2).如果引數中沒有合法的表示式和語句,則丟擲SyntaxError異常。

(3).如果非法呼叫eval(),則丟擲EvalError異常。

(4).如果傳遞給eval()的js程式碼生成了一個異常,eval()將把該異常傳遞給呼叫者。

簡單程式碼例項如下:

[JavaScript] 純文字檢視 複製程式碼
eval("console.log('螞蟻部落')");

當然在實際應用中不可能有這麼簡單的程式碼,下面再來一個較為接近實際應用的程式碼。

[JavaScript] 純文字檢視 複製程式碼
for (var loop = 1; loop < 10; loop++){
  eval('document.getElementById("div"+loop).innerHTML="www.softwhy.com"');
}

上面的程式碼也非常的簡單,可以設定不同id的div元素中的內容。

eval()用法深入介紹:

[JavaScript] 純文字檢視 複製程式碼
eval("var i=5");
console.log(i);

上面程式碼的輸出值是5,說明eval()並沒有建立一個獨立的作用域。

[JavaScript] 純文字檢視 複製程式碼
var func = function (){
  eval("var index=5");
  console.log(index);
}
func();
console.log(index)

上面程式碼的輸出結果說明,eval()不但不會建立自己的作用域,而且程式碼就是在當前作用域執行的。

在低版本的IE瀏覽器中還支援execScript()方法具體可以參閱execScript()方法用法簡單介紹一章節。

特別說明:嚴格模式下,eval()會生成一個單獨的作用域。

相關文章