新功能字符串的替代选项到真正的javascript

olo*_*olo 2 javascript

如果不使用,如何将字符串转换为真正的javascript对象 new Function

var sum = new Function('a', 'b', 'return a + b')
console.log(sum(2, 6))
Run Code Online (Sandbox Code Playgroud)

所以'a', 'b', 'return a + b'是由另一个JavaScript代码段生成的,所有内容都是字符串格式。eslint建议不要使用Function constrctor。The Function constructor is eval. (no-new-func)如果不使用Function constrctor,还有另一个选项可以完成相同的工作吗?谢谢

T.J*_*der 6

...还有其他选择可以做同样的事情吗?

有(eval),但比还要差new Function

从字符串创建函数基本上是不安全的。如果你能完全信任该字符串是安全的,你别无选择,只能一个字符串转换成一个函数,然后new Function是正确的工具。

但是,更好的选择是避免必须从字符串创建函数。


重申“绝对信任”位,这是一个执行此操作的示例:不允许Bob提供该字符串,然后在Alice的环境(她的浏览器,或更糟糕的是像Node这样的不受限制的环境)中将该字符串用作代码。 js)。这样做会使Alice面临安全风险。(显然,在SO之类的网站上,如果Alice是程序员,并且可以在运行代码之前读取代码,那是不一样的。;-))