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

Nor*_*der 17 javascript

我有以下一点代码

console.log("I am");

var x = "console.log('Alive!')";
Run Code Online (Sandbox Code Playgroud)

现在我只想用来x执行分配给它的代码字符串 - 我可能甚至不知道x的值,但只是想要执行它可能的任何东西 - 这可能吗?

Sim*_*mar 19

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

eval("console.log('Alive!')";);
Run Code Online (Sandbox Code Playgroud)


And*_*gen 11

你在寻找什么eval().通过将字符串传递给此函数,您将把字符串计算为JavaScript代码,它将返回字符串中的代码返回的任何返回值.

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

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


T.J*_*der 6

evalnew Function让您解析和执行字符串中的JavaScript代码。

通常,避免从字符串执行代码。而从来不从那里串是不可信的输入字符串执行代码(例如,如果用户A需要输入,从来不使用这些与用户B的会话来评估的话)。

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

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

例如:

console.log("I am");
var x = "console.log('Alive!')";
new Function(x)();
Run Code Online (Sandbox Code Playgroud)

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


Thi*_*ter 5

您正在寻找的是一个函数:

function x() {
    console.log('Alive!');
}
Run Code Online (Sandbox Code Playgroud)

如果x已经是一个包含可用于执行它的代码的字符串eval(x).eval虽然是邪恶的.