2011-09-30 26 views

回答

2

EVAL是表達式評估器和一個語句執行之間的混合的東西。它返回評估的最後一個表達式的結果(所有語句都是Javascript中的表達式),並允許最終的分號不變。

實例作爲表達式求值:

foo = 2; 
alert(eval('foo + 2')); 

實例作爲語句執行:

foo = 2; 
eval('foo = foo + 2;alert(foo);'); 

一個使用JavaScript的的eval是解析JSON文本,或許作爲Ajax框架的一部分。但是,現代瀏覽器提供JSON.parse作爲此任務的更安全替代方案。

source

考慮到這一點的唯一真正原因,我可以看到你想要使用eval()是執行用戶輸入..但是,導致嚴重的安全隱患......因此,在短期我要說eval()(在JavaScript至少)已成爲一個靜音功能;取而代之的是許多特定的功能,這些功能在過去會引導您使用eval()

另一個想法。 你可能會用它來執行由jjj返回的純js

你的服務器可以傳回一個包含「alert('hello world')」的字符串;你可以eval(returnData);

+0

+1了很好的解釋 – Icarus

1

最常見的情況,我發現需要使用eval是當我得到,我想作爲一個對象使用一個JSON字符串。

var obj = eval('('+jsonString+')'); 
+2

爲什麼不使用'JSON.parse'是什麼? – rlemon

+0

在JSON.parse之前有一段時間......但是現在沒有理由評價。 – hugomg

+0

呵呵,我在我的回答中提到了所有這些。 :P – rlemon

2

把你最喜歡的Javascript庫和grep用於eval的使用。希望你的圖書館是由知識淵博的人創造的,唯一的eval案例就是你正在尋找的一個很好的例子。

我查看了Dojo Toolkit,並在模塊加載器中看到了一個evals(它明顯具有爲缺少的模塊執行AJAX請求並執行代碼而不是創建腳本標記的模式)。

+1

+1表示研究精神 – Icarus

0

我不知道合法的,但是這是jQuery的使用EVAL-

globalEval: function(data) { 
    if (data && rnotwhite.test(data)) { 
     // We use execScript on Internet Explorer 
     // We use an anonymous function so that context is window 
     // rather than jQuery in Firefox 
     (window.execScript || function(data) { 
      window[ "eval" ].call(window, data); 
     })(data); 
    } 
},