zoukankan      html  css  js  c++  java
  • javascript 中的 delete

    1.对象属性删除

    function fun(){
     
    this.name = 'mm';
     
    }
     
    var obj = new fun();
     
    console.log(obj.name);//mm
     
    delete obj.name;
     
    console.log(obj.name); //undefined
    

     2.变量删除

    var name = 'lily';
    delete name;
    console.log(name); //lily
    

     直接用delelte删除不了变量

    3.删除不了原型链中的变量

    fun.prototype.age = 18;
    delete obj.age;
    console.log(obj.age) //18
    

     4.删除不了函数

        function x(){}  
        delete x; // false  
        typeof x; // "function"  
    

     注意delete只有在无法删除的情况下才会返回false。

    Activation object / Variable object(活动对象/变量对象)

        /* 全局环境下,this所指向的就是这个全局对象 */  
        var GLOBAL_OBJECT = this;  
          
        var foo = 1;  
        GLOBAL_OBJECT.foo; // 1  
        foo === GLOBAL_OBJECT.foo; // true  
          
        function bar(){}  
        typeof GLOBAL_OBJECT.bar; // "function"  
        GLOBAL_OBJECT.bar === bar; // true  
    
        (function(foo){  
          
          var bar = 2;  
          function baz(){}  
          
          /* 
          可以把活动对象作为一个抽象的存在,在每进入一个函数的时候,默认的arguments对象以及传入的参数都会自动被设为活动对象的属性:  
            ACTIVATION_OBJECT.arguments; // arguments变量 
         
          传入参数foo: 
            ACTIVATION_OBJECT.foo; // 1 
         
            函数内声明的变量bar: 
            ACTIVATION_OBJECT.bar; // 2 
         
            以及函数内定义的baz函数: 
            typeof ACTIVATION_OBJECT.baz; // "function" 
          */  
          
        })(1);  
    

     在声明变量或者函数时,他们都变成了当前上下文对象的属性--对于函数代码来说是活动对象,对于全局代码来说则是变量对象,而值得注意的是这些属性在创建时 都带有DontDelete标记,但是显式或者隐式的赋值语句所产生的属性并不会带有这个标记!这就是为什么有一些属性我们可以删除,但另一些却不可以:

    var GLOBAL_OBJECT = this;  
      
    /*  foo是被正常声明的,所以带有DontDelete标记,从而不能被删除! */  
      
    var foo = 1;  
    delete foo; // false  
    typeof foo; // "number"  
      
    /* bar是作为函数被声明,一样带有DontDelete,不能被删除。 */  
      
    function bar(){}  
    delete bar; // false  
    typeof bar; // "function"  
      
    /*  baz是直接通过一个赋值而没有声明,不会持有DontDelete标记,才可以被删除! */  
      
    GLOBAL_OBJECT.baz = 'blah';  
    delete GLOBAL_OBJECT.baz; // true  
    typeof GLOBAL_OBJECT.baz; // "undefined"
    

     DontDelete就是一个特殊的标记,用来表明某一个属性能否被删除。需要注意的是一些内建的对象是自动持有这个标记的,从而不能被删除,比如函数内的arguments,以及函数的length属性。

        (function(){  
          
          /*arguments对象默认持有DontDelete标记,不能被删除。 */  
          
          delete arguments; // false  
          typeof arguments; // "object"  
          
          /* 函数的length属性也一样 */  
          
          function f(){}  
          delete f.length; // false  
          typeof f.length; // "number"  
          
        })();  
    

      函数的传入参数也是一样的:

        (function(foo, bar){  
          
          delete foo; // false  
          foo; // 1  
          
          delete bar; // false  
          bar; // 'blah'  
          
        })(1, 'blah');  
    
        var GLOBAL_OBJECT = this;  
          
        /* 通过声明的全局变量会持有DontDelete,无法被删除。 */  
        var foo = 1;  
          
        /* 没有经过声明的变量赋值不会带DontDelete,可以被删除。 */  
        bar = 2;  
          
        delete foo; // false  
        typeof foo; // "number"  
          
        delete bar; // true  
        typeof bar; // "undefined"  
    

     需要注意的是属性标记诸如DontDelete是在这个属性被创建的时候 产生的,之后对该属性的任何赋值都不会改变此属性的标记!

        /* foo被声明时会带有DontDelete标记 */  
        function foo(){}  
          
        /* 之后对foo的赋值无法改变他所带的标记! */  
        foo = 1;  
        delete foo; // false  
        typeof foo; // "number"  
          
        /* 当给一个还不存在的属性赋值的时候会创建一个不带任何标记的属性(包括DontDelete),进而可以被删除! */  
          
        this.bar = 1;  
        delete bar; // true  
        typeof bar; // "undefined"  
    

     转载:javascript delete操作符  http://www.cnblogs.com/yuzhongwusan/archive/2012/06/14/2549879.html

  • 相关阅读:
    Hibernate配置
    Log4j 局部笔记
    有关接口 笔记 懒人版
    JAVA面向对象编程这本书的摘录~!(2016-5-23)
    关于关闭数据流
    安卓桌面开发小应用
    ACM Sdut 2158 Hello World!(数学题,排序) (山东省ACM第一届省赛C题)
    hdu 1573 A/B (扩展欧几里得)
    hdu 1788 Chinese remainder theorem again(最小公倍数)
    ACM hdu 1019 Least Common Multiple
  • 原文地址:https://www.cnblogs.com/zhuiluoyu/p/5012958.html
Copyright © 2011-2022 走看看