从String执行JavaScript代码

时间:2013-08-05 15:15:08

标签: javascript string

是否有'代码/功能/算法'来转换javascript字符串?:

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

在javascript语法中;在这种情况下,它会在屏幕上显示Hello World!

5 个答案:

答案 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

When is JavaScript's eval() not evil?