zoukankan      html  css  js  c++  java
  • 避免使用eval()

    eval()可以将任意的字符串当做一个JavaScript代码来执行。

    eval()使用实例:

        // 烦模式
        var property = 'name';
        console.log(eval('obj.'+property));
        //推荐方法
        var property = 'name';
        console.log(obj[property]);

    使用简单的方括号将需要访问的动态属性括起来

    使用eval()包含一些安全隐患,因为可以动态的修改传入eval()内部的字符串,并执行。

    2、牢记通过setInterval()、setTimeout、和function()等构造函数来传递参数

      //反模式
        setTimeout('myfn()',3000);
        setTimeout('myfn(1,2,6)',3000);
        //推荐模式
        setTimeout(myfn,3000);
        setTimeout(function(){
            myfn(1,2,6);
        },3000)

    使用new Function()构造函数和eval()比较类似,如果一定要使用eval(),可以使用new Function()来代替eval()。这样做的好处是new Function()中的代码将在局部函数空间中运行,可以避免生成全局变量,避免自动生成成为全局变量的方法是将eval()调用封装到一个即时函数中:

      console.log(typeof a);//未定义
        console.log(typeof b);//未定义
        console.log(typeof c);//未定义
    
        var s1 = 'var a = 1;console.log(a);';
        eval(s1);//1
        var s2 = 'var b = 2;console.log(b);';
        new Function(s2)();//2
        var s3 = 'var c = 3;console.log(c);';
        (function(){
            eval(s3);
        })();//3
    
        console.log(typeof a);//number
        console.log(typeof b);//undefined
        console.log(typeof c);//undefined

    所以用new Function()和(function(){eval('内容')})() 的作用是一样。

    都是形成了内部函数,内部变量,如果单独使用eval()会产生全局变量

    new Function 和 Function 是一样的

    Function就像一个沙盒不能修改和访问它的作用域以外的变量,但是eval()可以

    (function(){
            var a = 23;
            eval('a = 6;console.log(a);');//6
            console.log(a);//6
        })();
        (function(){
            var b = 56;
            Function('console.log(b);')();//undefined
        })();
  • 相关阅读:
    Linux 之dhcp服务搭建
    常用网络指令
    图解:光缆、终端盒、尾纤的作用和接法
    Excel2007给表格设置成只读加密属性 让他人无法修改
    CentOS 安裝 VMware Workstation / VMware Player
    Linux 命令之 grep
    iOS开发UI篇—从代码的逐步优化看MVC
    iOS开发UI篇—字典转模型
    iOS开发UI篇—九宫格坐标计算
    iOS开发UI篇—懒加载
  • 原文地址:https://www.cnblogs.com/jokes/p/9459920.html
Copyright © 2011-2022 走看看