我有以下一点代码
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中使用它,但这可能只会导致客户端出现问题,因此可能不会产生很大的安全威胁,在评估服务器端的代码时,您会非常小心.
正如在此处的其他帖子中暗示的那样,如果您控制要运行的源代码,则可能需要创建函数而不是计算字符串.
eval并new Function让您解析和执行字符串中的JavaScript代码。
通常,避免从字符串执行代码。而从来不从那里串是不可信的输入字符串执行代码(例如,如果用户A需要输入,从来不使用这些与用户B的会话来评估的话)。
我在这里看到的答案指向您eval。eval授予对局部变量和代码等的访问权限,如果将其与不受信任的输入一起使用,则它确实功能强大且非常危险。
尽可能避免 eval。您可以轻松避免这种情况:
例如:
console.log("I am");
var x = "console.log('Alive!')";
new Function(x)();Run Code Online (Sandbox Code Playgroud)
该代码将创建一个函数,其主体为的文本x,然后立即执行该函数。
您正在寻找的是一个函数:
function x() {
console.log('Alive!');
}
Run Code Online (Sandbox Code Playgroud)
如果x已经是一个包含可用于执行它的代码的字符串eval(x).eval虽然是邪恶的.