1

嗨,如果可能的话,我想在没有 eval的情况下从字符串/数组运行 javascript 。这有点像我想要的。

code = ["document.write('hello')", "function(){}"];
code.run[1];

任何帮助将不胜感激,谢谢。

4

2 回答 2

5

从字符串运行 javascript 的唯一方法是使用eval().
更正:除了eval("codeString");,new Function("codeString")();也会执行你的代码。这样做的缺点是,当您调用时,您的代码必须被解释new Function(...),而与浏览器在预定义代码时可能使用的优化相比,如下例所示。
所以,eval("codeString");并且new Function("codeString")();是可能的,但是是坏主意。

更好的选择是将函数存储在数组中,如下所示:

function foo(){
    document.write('hello');
}
function bar(){
    return 1+2;
}

var code = [   foo,
               function(){
                   alert("Hi there!");
               },
               bar
           ];
code[0](); // writes "hello" to the document.
code[1](); // alerts "Hi there!"
code[2](); // returns 3.
于 2012-11-22T09:14:39.330 回答
2

您可以将其作为函数执行。

像这样

function yourNewEval(){
    var code = ["document.write('hello');", "function(){}"];
    var F = new Function(code[0]);
    return(F());
}
yourNewEval();

从 Stefan 的答案复制的答案。

如何执行存储为字符串的 Javascript中有很多创造性的答案?

于 2012-11-22T09:23:00.033 回答