是否有'代码/功能/算法'来转换javascript字符串?:
var alert = "alert('Hello World!')";
在javascript语法中;在这种情况下,它会在屏幕上显示Hello World!
。
答案 0 :(得分: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:...">
。
答案 1 :(得分:0)
var alert = "alert('Hello World!')";
eval(alert);
评估表示为字符串的JavaScript代码。
Here is the explanation and other uses of the eval() function.
由于您正在执行一些任意字符串作为javascript代码,这可能会导致一些意料之外的问题。如果你解释了为什么你需要做你正在做的事情,那么可能会有更安全的选择。
答案 2 :(得分:0)
您可以使用eval
,但我们非常气馁!
var alert = "alert('This is evil');"
eval(alert);
答案 3 :(得分:0)
您正在寻找评估。你想要小心,这可能会带来一些安全风险。
您可能需要阅读此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!')";
答案 4 :(得分:-1)
有任何可能的解决方案:
var alert = "alert('Hello World!')";
eval(alert );
确保eval
邪恶 @Frits van Campen