我有以下代码
console.log("I am");
var x = "console.log('Alive!')";
现在我只想用来x
执行分配给它的代码字符串——例如,我什至可能不知道 x 的值,但只是想执行它可能的任何事情——这可能吗?
我有以下代码
console.log("I am");
var x = "console.log('Alive!')";
现在我只想用来x
执行分配给它的代码字符串——例如,我什至可能不知道 x 的值,但只是想执行它可能的任何事情——这可能吗?
eval()这会将字符串转换为 javascript 代码。
eval("console.log('Alive! Woo!')");
eval
并new Function
让您从字符串中解析和执行 JavaScript 代码。
一般来说,避免从字符串执行代码。并且永远不要从字符串是不受信任的输入的字符串中执行代码(例如,如果您从用户 A 获取输入,则永远不要在与用户 B 的会话中使用这些来评估它)。
我在这里看到指向您的答案eval
。eval
授予对您的局部变量等代码的访问权限,如果您将其与不受信任的输入一起使用,它会变得非常强大且非常危险。
在可能的情况下,避免eval
。在您的情况下,您可以轻松避免它:
例如:
console.log("I am");
var x = "console.log('Alive!')";
new Function(x)();
该代码创建一个函数,其主体是来自 的文本x
,然后立即执行该函数。
您正在寻找的是eval()
. 通过将字符串传递给此函数,您将把字符串评估为 JavaScript 代码,它将返回字符串中的代码返回的任何返回值。
不过在使用这个功能时要注意。您不想评估任何您不知道可以安全执行的代码。例如,运行用户生成的代码可能会弄乱您正在制作的任何东西。虽然在网站上的 JavaScript 中使用它可能只会导致客户端出现问题,因此可能不会造成太大的安全威胁,但在评估例如服务器端的代码时,您需要非常小心。
正如此处其他帖子中所暗示的那样,如果您控制要运行的源代码,您可能想要创建一个函数而不是评估字符串。
您要查找的内容称为函数:
function x() {
console.log('Alive!');
}
Ifx
已经是一个包含您可以用来执行它的代码的字符串。虽然是邪恶的。eval(x)
eval
var x = "console.log('Alive!')";
eval(x)
让函数 mathchallenge (num) 将从 1 到 num 的所有数字相加,例如,如果输入为 4,那么您的程序应该返回 10,因为 1+2+3+4=10。对于测试用例,参数 num 将是 1 到 1000 之间的任何数字