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

标签 javascript

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

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/

相关文章:

javascript - 在 Javascript 中连续打印 X 数量的项目

javascript - 如何在 Div 中按下按钮

javascript - 让 Canvas 充当按钮

javascript - Google map 路线使用 1-2-3 而不是 A-B-C

javascript - 为什么要使用 Object.create?

javascript - 单击时无法打开模态表单

javascript - CSS/JS : fixed position though scrolling

javascript - Ionic4 显示带换行符的文本

javascript - 在JavaScript中使用push方法定义键

javascript - TypeScript - 检查给定的 'any' 参数是否为自定义类型?