如何在Javascript中将字符串转换为可执行的代码行?

时间:2012-12-23 20:15:21

标签: javascript

我有以下代码

console.log("I am");

var x = "console.log('Alive!')";

现在我只想使用x来执行分配给它的代码字符串 - 我可能甚至不知道x的值,但只是想要执行它,无论它可能是什么 - 这是可能的?

5 个答案:

答案 0 :(得分:17)

eval()这会将字符串转换为javascript代码。

eval("console.log('Alive!')";);

答案 1 :(得分:10)

您要找的是eval()。通过将字符串传递给此函数,您将把字符串计算为JavaScript代码,它将返回字符串中的代码返回的任何返回值。

尽管使用此功能时请注意。您不希望评估任何您不知道可以安全执行的代码。例如,运行用户生成的代码可能会搞乱你正在做的任何事情。虽然在网站上的JavaScript中使用它,但这可能只会导致客户端出现问题,因此可能不会产生很大的安全威胁,在评估服务器端的代码时,您会非常小心。 / p>

正如在此处的其他帖子中暗示的那样,如果您控制要运行的源代码,则可能需要创建函数而不是计算字符串。

答案 2 :(得分:5)

您要找的是功能

function x() {
    console.log('Alive!');
}

如果x已经是包含代码的字符串,您可以使用eval(x)来执行它。 eval虽然是邪恶的。

答案 3 :(得分:5)

evalnew Function使您可以从字符串中解析和执行JavaScript代码。

通常,避免从字符串执行代码。并且从不从字符串是不受信任的输入的字符串中执行代码(例如,如果您从用户A获得输入,则永远不要在与用户B的会话中使用它们来评估它)。

我在这里看到的答案将您指向evaleval授予对局部变量和代码等的访问权限,如果将其与不受信任的输入配合使用,则它确实功能强大且真正很危险。

尽可能避免使用eval。您可以轻松避免这种情况:

例如:

console.log("I am");
var x = "console.log('Alive!')";
new Function(x)();

该代码创建一个函数,其主体为x中的文本,然后立即执行该函数。

答案 4 :(得分:3)

var x = "console.log('Alive!')";
eval(x)