首页 > 解决方案 > 新函数字符串到真正的 javascript 的替代选项

问题描述

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

var sum = new Function('a', 'b', 'return a + b')
console.log(sum(2, 6))

所以'a', 'b', 'return a + b'是由另一个 javascript 片段生成的,一切都是字符串格式。eslint 建议不要使用 Function constrctorThe Function constructor is eval. (no-new-func)如果不使用Function constrctor是否有其他选项可以做同样的工作?谢谢

标签: javascript

解决方案


...是否有另一种选择可以做同样的工作?

有 ( eval),但比 还要糟糕new Function

从字符串创建函数从根本上说是不安全的。如果您可以绝对相信字符串是安全的,并且您别无选择,只能将字符串转换为函数,那么new Function就是正确的工具。

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


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


推荐阅读