gpt4 book ai didi

javascript - 如何在javascript中评估字符串函数并返回值?

转载 作者:行者123 更新时间:2023-12-03 00:30:58 24 4
gpt4 key购买 nike

我有一个字符串方法,例如:

var str = "function evalTest(param){if(param)return '<div>hello</div>'}else return '<div>world</div>'"

我正在替换参数,例如:

 var res = str.replace("param", "param=false");

现在,如果我像这样进行评估:

var final = eval(res);

我期望最终应该包含结果“world”,因为传递了 param = false。

如何实现“世界”这个结果?

最佳答案

首先需要注意的是:几乎可以肯定,通过在字符串中使用该函数来解决您试图解决的任何问题,都有更好的解决方案。

还有一个:除了同一最终用户之外,切勿评估由最终用户提供的代码。例如,切勿让用户 A 提供代码,然后在用户 B 的浏览器中评估它。 (用户 B 不知道您正在这样做并明确同意。)

实际上,几乎每次您使用 eval(或其表亲 new Function)时,都值得退一步看看是否还有其他方法可以使用。

<小时/>

但回答所提出的问题:

eval 只是创建函数。该字符串中没有任何调用它的内容。

因为 eval 在当前作用域中神奇地工作,所以对字符串进行 eval 操作会在当前作用域中创建函数。然后,您可以调用您的函数来获取您正在寻找的结果:

var str = "function evalTest(param){if(param){return '<div>hello</div>'}else {return '<div>world</div>'}}";
var res = str.replace("param", "param=false");
eval(res);
var final = evalTest();
console.log(final);

请注意,我修复了函数文本中的几个语法错误(主要是大括号问题)。

如果您不想在当前作用域中定义该函数,可以修改字符串使其成为函数表达式并立即调用:

var str = "function evalTest(param){if(param){return '<div>hello</div>'}else {return '<div>world</div>'}}";
var res = str.replace("param", "param=false");
var final = eval("(" + res + ")()");
console.log(final);

关于javascript - 如何在javascript中评估字符串函数并返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53872963/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com