執行JavaScript代碼是否有任何 '代碼/功能/ algoritm' 到JavaScript字符串?:從字符串
var alert = "alert('Hello World!')";
在JavaScript語法轉換;在這種情況下,它將在屏幕上顯示Hello World!
。
執行JavaScript代碼是否有任何 '代碼/功能/ algoritm' 到JavaScript字符串?:從字符串
var alert = "alert('Hello World!')";
在JavaScript語法轉換;在這種情況下,它將在屏幕上顯示Hello World!
。
是的,有:
var alert = "alert('Hello World!')";
eval(alert);
求值表示爲一個字符串的JavaScript代碼。
Here is the explanation and other uses of the eval() function.
,因爲你正在執行一些任意的字符串作爲JavaScript代碼這會導致一些無法預料的問題。如果你解釋了爲什麼你需要做你正在做的事情,也許有一個更安全的選擇。
爲了解決這個問題的困難,應該注意的是,一個特定於您的用例的解釋器幾乎總是一條優越的路線。 – matt3141
謝謝你,這麼多 –
您可以使用eval
但它的高度氣餒!
var alert = "alert('This is evil');"
eval(alert);
您正在尋找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!')";
爲了解決所有問題,爲什麼?所有答案都是正確的。也許不推薦,但大多數人注意到這一點。 – Martijn
有任何可能的解決方案:
var alert = "alert('Hello World!')";
eval(alert);
確認,那eval
是邪惡 @Frits麪包車坎彭
您可以考慮創建針對你的使用情況的分析器。這會將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:...">
。
你的意思是'eval'?不要使用它,它是**惡**。 – Halcyon
你需要什麼? (也許有比['eval']更好的解決方案(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval)) – Bergi
這裏是[爲什麼你不應該使用'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)。 –