如果我们不使用,如何将字符串转换为真正的javascript对象new Function
var sum = new Function('a', 'b', 'return a + b')
console.log(sum(2, 6))
So 'a', 'b', 'return a + b'
是由另一个 javascript 片段生成的,一切都是字符串格式。
eslint 建议不要使用函数构造函数The Function constructor is eval. (no-new-func)
如果不使用Function constrctor
还有另一种选择可以完成同样的工作吗?谢谢
...还有其他选择可以完成相同的工作吗?
有 (eval
),但它甚至比new Function
.
从字符串创建函数从根本上来说是不安全的。如果可以的话绝对地相信绳子是安全的并且你别无选择但要将字符串转换为函数,则new Function
是正确的工具。
但更好的选择是避免从字符串创建函数。
关于“绝对信任”,这是一个例子not要做的事情:不允许 Bob 提供字符串,然后在 Alice 的环境(她的浏览器,或更糟糕的 Node.js 等不受限制的环境)中使用该字符串作为代码。这样做会使 Alice 面临安全风险。(显然,在像 SO 这样的网站上,如果 Alice 是一名程序员并且可以在运行代码之前阅读代码,那就不同了。;-))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)