JS替代eval的方法

eval() 是全局对象的一个函数属性。

eval() 的参数是一个字符串。如果字符串表示的是表达式,eval() 会对表达式进行求值。如果参数表示一个或多个 JavaScript 语句,那么eval() 就会执行这些语句。不需要用 eval() 来执行一个算术表达式:因为 JavaScript 可以自动为算术表达式求值。

如果你以字符串的形式构造了算术表达式,那么可以在后面用 eval()对它求值。例如,假设你有一个变量 x,您可以通过将表达式的字符串值(例如 3 * x + 2)赋值给一个变量,然后在你的代码后面的其他地方调用 eval(),来推迟涉及 x 的表达式的求值。

如果 eval() 的参数不是字符串, eval() 会将参数原封不动地返回。
但是eval使用很危险,如果你用 eval() 运行的字符串代码被恶意方(不怀好意的人)修改,您最终可能会在您的网页/扩展程序的权限下,在用户计算机上运行恶意代码。更重要的是,第三方代码可以看到某一个 eval() 被调用时的作用域,这也有可能导致一些不同方式的攻击。相似的 Function 就不容易被攻击。

在这里插入代码片
  //计算表达式的值
         function evil(fn) {
            var Fn = Function;  //一个变量指向Function,防止有些前端编译工具报错
            return new Fn('return ' + fn)()();
        }

        function aa() {
            console.log(99999)
        }
        localStorage.setItem('ds', aa)
        let nn = localStorage.getItem('ds')
        evil(nn)

最后控制台显示aa函数打印结果
在这里插入图片描述


版权声明:本文为weixin_45750771原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。