我從未遇到過我需要eval()
的情況。eval()(或間接eval/execScrtipt())的合法用途是什麼?
很多時候,人們說,[]
屬性訪問器使得eval()
冗餘。
其實,是不是一個痛苦的語句完全一樣推動它作爲參數進入eval()
功能同樣的事情的執行。它實際用於什麼?
你能否提供何時可以使用eval有用的例子()?
我從未遇到過我需要eval()
的情況。eval()(或間接eval/execScrtipt())的合法用途是什麼?
很多時候,人們說,[]
屬性訪問器使得eval()
冗餘。
其實,是不是一個痛苦的語句完全一樣推動它作爲參數進入eval()
功能同樣的事情的執行。它實際用於什麼?
你能否提供何時可以使用eval有用的例子()?
EVAL是表達式評估器和一個語句執行之間的混合的東西。它返回評估的最後一個表達式的結果(所有語句都是Javascript中的表達式),並允許最終的分號不變。
實例作爲表達式求值:
foo = 2;
alert(eval('foo + 2'));
實例作爲語句執行:
foo = 2;
eval('foo = foo + 2;alert(foo);');
一個使用JavaScript的的eval是解析JSON文本,或許作爲Ajax框架的一部分。但是,現代瀏覽器提供JSON.parse
作爲此任務的更安全替代方案。
考慮到這一點的唯一真正原因,我可以看到你想要使用eval()
是執行用戶輸入..但是,導致嚴重的安全隱患......因此,在短期我要說eval()
(在JavaScript至少)已成爲一個靜音功能;取而代之的是許多特定的功能,這些功能在過去會引導您使用eval()
。
另一個想法。 你可能會用它來執行由jjj返回的純js
你的服務器可以傳回一個包含「alert('hello world')」的字符串;你可以eval(returnData);
。
把你最喜歡的Javascript庫和grep用於eval的使用。希望你的圖書館是由知識淵博的人創造的,唯一的eval案例就是你正在尋找的一個很好的例子。
我查看了Dojo Toolkit,並在模塊加載器中看到了一個evals(它明顯具有爲缺少的模塊執行AJAX請求並執行代碼而不是創建腳本標記的模式)。
+1表示研究精神 – Icarus
我不知道合法的,但是這是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);
}
},
+1了很好的解釋 – Icarus