JavaScript中是否存在可将字符串转换为可执行表达式的函数?
实现方法
JavaScript 原生支持字符串转可执行表达式的能力,可以实现你要的效果,常用方案有两个:
- 使用全局
eval()方法eval()会直接将传入的字符串作为JavaScript代码解析运行,返回表达式的执行结果,修改代码即可得到预期输出:console.log(Math.sqrt(4)); // 输出计算结果4 let str = 'Math.sqrt(4)'; console.log(eval(str)); // 执行字符串表达式,同样输出4安全提示:
eval()运行在当前调用的作用域中,可以访问局部变量,若传入的字符串来自不可信的外部输入,会存在严重的代码注入风险,生产环境非必要不推荐使用。 - 使用
Function构造函数
通过Function构造器动态生成执行表达式的函数,调用后即可拿到计算结果,这种方式默认运行在全局作用域,不会访问局部作用域的变量,风险相对eval更低:console.log(Math.sqrt(4)); // 输出计算结果4 let str = 'Math.sqrt(4)'; const getResult = new Function(`return ${str}`); console.log(getResult()); // 输出4
所有动态执行字符串代码的方案都存在安全隐患,使用前必须严格校验字符串内容来源,禁止直接执行未经处理的用户输入。
内容的提问来源于stack exchange,提问作者misha
相关产品推荐
相关产品推荐

