我有以下代码
console.log("I am");
var x = "console.log('Alive!')";
现在我只想使用x
来执行分配给它的代码字符串 - 我可能甚至不知道x的值,但只是想要执行它,无论它可能是什么 - 这是可能的?
答案 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)
eval
和new Function
使您可以从字符串中解析和执行JavaScript代码。
通常,避免从字符串执行代码。并且从不从字符串是不受信任的输入的字符串中执行代码(例如,如果您从用户A获得输入,则永远不要在与用户B的会话中使用它们来评估它)。
我在这里看到的答案将您指向eval
。 eval
授予对局部变量和代码等的访问权限,如果将其与不受信任的输入配合使用,则它确实功能强大且真正很危险。
尽可能避免使用eval
。您可以轻松避免这种情况:
例如:
console.log("I am");
var x = "console.log('Alive!')";
new Function(x)();
该代码创建一个函数,其主体为x
中的文本,然后立即执行该函数。
答案 4 :(得分:3)
var x = "console.log('Alive!')";
eval(x)