JavaScript delete关键字

delete

语法:Boolean delete obj.property
主要用于删除对象的属性,删除成功或失败会返回相应布尔值
可以删除非关键字定义的全局变量(var a = 1不能被删除,a= 1可以)
删除对象中不存在的属性会返回true
删除数组元素不会改变数组的长度(索引不变),被删除的索引值变为empty,遍历打印时表现为undefined,forin遍历时,empty会被忽略

delete删除对象属性

    <script>
        var a = [1,2,3,4];
        a.name = "aaa";
        console.log(delete a["name"]);
        console.log(delete a["z"]);//true
        console.log("a:",a);
    </script>

删除原型属性

    <script>
        var fn = new Function();
        fn.prototype.prop = "a1";
        console.log(delete fn.prototype["prop"]);
        console.log(fn.prototype);
    </script>

delete删除数组元素

和splice不同,delete删除数组元素不会改变数组的长度,且会在索引值上留下一个empty。该epmty可以被for、forof访问,但会被forin、forEach、map等跳过、省略
关于js遍历方式的特性可以参考我的另一篇博客:Funny Loop

    <script>
        var a = [1,2,3,4];
        a.name = "aaa";
        delete a[1];
        console.log("a:",a);
        //会遍历到数组的empty索引值,不会遍历索引之外数组对象的属性
        for(var i = 0; i < a.length; i++){
            console.log(i,a[i]);//undefined
            // a = null; //可以被打断
        }
    </script>

posted @ 2020-03-19 13:00  IslandZzzz  阅读(338)  评论(0编辑  收藏  举报