2013-08-05 104 views
-2

執行JavaScript代碼是否有任何 '代碼/功能/ algoritm' 到JavaScript字符串?:從字符串

var alert = "alert('Hello World!')"; 

在JavaScript語法轉換;在這種情況下,它將在屏幕上顯示Hello World!

+4

你的意思是'eval'?不要使用它,它是**惡**。 – Halcyon

+1

你需要什麼? (也許有比['eval']更好的解決方案(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval)) – Bergi

+0

這裏是[爲什麼你不應該使用'eval ()'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval#Don.27t_use_eval.21)。您可能希望[使用第一類函數](https://developer.mozilla)。組織/ EN-US /文檔/網絡/的JavaScript /參考/ Global_Objects/EVAL#Use_functions_instead_of_evaluating_snippets_of_code)。 –

回答

0

是的,有:

var alert = "alert('Hello World!')"; 

eval(alert); 

求值表示爲一個字符串的JavaScript代碼。

Here is the explanation and other uses of the eval() function.

,因爲你正在執行一些任意的字符串作爲JavaScript代碼這會導致一些無法預料的問題。如果你解釋了爲什麼你需要做你正在做的事情,也許有一個更安全的選擇。

+0

爲了解決這個問題的困難,應該注意的是,一個特定於您的用例的解釋器幾乎總是一條優越的路線。 – matt3141

+0

謝謝你,這麼多 –

0

您可以使用eval但它的高度氣餒!

var alert = "alert('This is evil');" 
eval(alert); 
0

您正在尋找eval。你想要小心,這可能會造成一些安全風險。

你可能想讀這eval() isn’t evil, just misunderstood

var alert = "alert('Hello World!')"; 
eval(alert); 

一種更好的方法可能是這樣的:

<script src="pretendToBeJavascript.php"></script> 

// pretendToBeJavascript.php contents: 
header('Content-type: text/javascript'); 
echo "alert('Hello World!')"; 
+2

爲了解決所有問題,爲什麼?所有答案都是正確的。也許不推薦,但大多數人注意到這一點。 – Martijn

2

您可以考慮創建針對你的使用情況的分析器。這會將eval的功率限制爲您的預期行爲,例如,以下限制代碼執行全局功能。

var parse_vals = function(expr) { 
    if(expr.match(/^['"][^'"]+['"]$/)) { 
     // parse a string literal 
     return expr.substr(1, expr.length - 2); 
    } else if(!isNaN(parseInt(expr))) { 
     // parse a number 
     return parseInt(expr); 
    } else { 
     // fail in parsing literal 
     return null; 
    } 
}; 
var alert_str = "alert('Hello World!')", 
    comps = alert_str.match(/^([^(]+)\(([^)]+)\)$/); 
    // => ["alert(...)", "alert", "'Hello World!'"] 
if(comps) { 
    // apply a global function to the provided arguments, parsed. 
    // all values thus need to be literals, no variable access. 
    window[comps[1]].apply(window, comps[2].split(/,\s?/).map(parse_vals)); 
} else { 
    alert("Invalid code provided."); 
} 

正如其他人所指出的,eval是不安全的,如果在所有使用應謹慎使用。因此,一個特定於用例的解析器是一個更好的解決方案。更重要的是,無論如何,一個全面的孩子評估者的力量是是矯枉過正。表達式的組成部分可以變化並加以處理。如果整個字符串是可變的,則允許運行任意程序,因此不妨將其包含爲獨立的腳本,例如<script src="data:...">