28

我有以下代码

console.log("I am");

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

现在我只想用来x执行分配给它的代码字符串——例如,我什至可能不知道 x 的值,但只是想执行它可能的任何事情——这可能吗?

4

6 回答 6

34

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

eval("console.log('Alive! Woo!')");
于 2014-01-20T20:25:59.437 回答
16

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

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

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

在可能的情况下,避免eval。在您的情况下,您可以轻松避免它:

例如:

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

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

于 2018-06-26T16:34:05.493 回答
14

您正在寻找的是eval(). 通过将字符串传递给此函数,您将把字符串评估为 JavaScript 代码,它将返回字符串中的代码返回的任何返回值。

不过在使用这个功能时要注意。您不想评估任何您不知道可以安全执行的代码。例如,运行用户生成的代码可能会弄乱您正在制作的任何东西。虽然在网站上的 JavaScript 中使用它可能只会导致客户端出现问题,因此可能不会造成太大的安全威胁,但在评估例如服务器端的代码时,您需要非常小心。

正如此处其他帖子中所暗示的那样,如果您控制要运行的源代码,您可能想要创建一个函数而不是评估字符串。

于 2012-12-23T20:17:37.733 回答
5

您要查找的内容称为函数

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

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

于 2012-12-23T20:16:00.913 回答
4
var x = "console.log('Alive!')";
eval(x)
于 2012-12-23T20:18:06.457 回答
0

让函数 mathchallenge (num) 将从 1 到 num 的所有数字相加,例如,如果输入为 4,那么您的程序应该返回 10,因为 1+2+3+4=10。对于测试用例,参数 num 将是 1 到 1000 之间的任何数字

于 2022-01-28T15:58:54.590 回答