将新函数字符串转换为真实javascript的可选选项

将新函数字符串转换为真实javascript的可选选项,javascript,Javascript,如果不使用new函数 var sum = new Function('a', 'b', 'return a + b') console.log(sum(2, 6)) 因此,'a',b',returna+b'是由另一个javascript代码段生成的,所有内容都是字符串格式。 eslint建议不要使用函数构造函数函数构造函数是eval。(无新功能)如果不使用函数构造函数是否有其他选项可以完成相同的工作?谢谢 …还有其他方法可以做同样的工作吗 有(eval),但它比新功能更糟糕 从字符串创建函数基

如果不使用
new函数

var sum = new Function('a', 'b', 'return a + b')
console.log(sum(2, 6))
因此,
'a',b',returna+b'
是由另一个javascript代码段生成的,所有内容都是字符串格式。 eslint建议不要使用函数构造函数
函数构造函数是eval。(无新功能)
如果不使用
函数构造函数
是否有其他选项可以完成相同的工作?谢谢

…还有其他方法可以做同样的工作吗

有(
eval
),但它比
新功能更糟糕

从字符串创建函数基本上是不安全的。如果您可以绝对相信字符串是安全的,并且除了将字符串转换为函数之外别无选择,那么
新函数
就是正确的工具

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



关于“绝对信任”这一点,这里有一个例子说明了应该做什么:不允许Bob提供字符串,然后在Alice的环境中(她的浏览器,或者在Node.js等不受限制的环境中)将该字符串用作代码。这样做会使Alice面临安全风险。(显然,在这样的网站上,如果Alice是一名程序员,可以在运行代码之前阅读代码,那就不同了。;-)

修复生成要求值字符串的代码,使其生成其他内容。这必须有一个dupetarget…@GrafiCodeStudio-除了答案主要是“使用新函数”(因为问题是关于避免评估的。@T.J.Crowder我以为OP想要避免评估too@T.J.Crowder这是一个高度评价:“没有评估和功能”谢谢!是的,我得到
评估可能是有害的。(没有评估)
然后看起来像
新功能
似乎是此用途的必备功能case@olo如果您仅将此用于数学表达式,则不会。请检查