JavaScript函数_06 eval | with

eval 函数

  • 作用:把字符串转换为js的代码
    new Function("字符串"); //把字符串转换为js的代码
  • 区别:
    Function:当函数调用的时候才会执行
    eval:立刻执行
  • 使用建议:不推荐使用(js是词法作用域,eval和with可以动态的调整[破坏]js的词法作用域),性能不好。
  • 场景:页面中接收用户的js代码 + json处理
<script>
    //把JSON数据转换为对象
    var obj = JSON.parse("{\"name\":\"默默的备胎\"}");

    console.log(obj);
    //把对象转换为json数据
    var str = JSON.stringify(obj);
    console.log(str);
</script>
<script>
    var jsonStr = "{\"name\":\"默默的备胎\"}";
    //json--->对象
    eval("var o =" +jsonStr);
    console.log(o);
    var obj = eval("(" + jsonStr +")");
    console.log(obj);
</script>

with

  • 作用:把对象的作用域引申到{}中,达到缩减代码的目的
  • 应用场合:在写代码的时候,要写很长的前缀.对象.属性.属性.属性
  • 具体的使用注意:
    01 在{}中不能使用无前缀的方式来增加属性
    02 this应该是谁? window
    03 严格模式下,with被禁止使用了
  • 使用建议:不建议使用
<script>
    var obj ={
        name:"默认的名称",
        age:20,
        des:"描述信息"
    };

    obj.name = "李四";
    obj.age = 100;
    obj.des = "是的放假了是放假";
    with (obj)
    {
        //在{}中可以使用无前缀的方式来修改属性
        name = "默认的名称+1";
        age = 101;
        des = "测试"
    }

    console.log(obj);

</script>
<script>
    window.onload = function(){
        //01 获得指定的标签
        var div = document.getElementById("divID");

        //02 设置样式
//        div.style.height = "100px";
//        div.style.width = "200px";
//        div.style.backgroundColor = "red";
//        div.style.border = "2px solid #ddd";

//        with (div.style)
//        {
//            height = "80px";
//            width = "300px";
//            backgroundColor = "red";
//            border = "2px solid #ddd";
//        }

        //推荐的替换写法  即时调用函数
        (function(t){
            t.height = "600px";
            t.width = "400px";
            t.backgroundColor = "red";
            t.border = "2px solid #aaa";
            var b = "demo01";
        })(div.style)

    }
</script>
<script>
    var obj = {
        name:"名称",
        age:33,
        color:"red",
        className:"修仙01",
        number:2017
    }

    //尝试使用with来设置属性
    with (obj)
    {
        //修改属性的值
        name = "李四";
        //新增属性
        obj.des = "我是des";
        console.log(this);
    }

    console.log(obj);
</script>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容