zoukankan      html  css  js  c++  java
  • JavaScript delete

    javascript delete examplevar flower={};
        flower.name="oop";
        delete flower.name; //true
        alert(flower.name);  //undefined

       创建一个名为flower的对象

       flower具有成员name,值"oop";

       delete 操作 删除这个成员

       删除成功,已不存在flower.name这个成员

    javascript delete example 2alert(isNaN(5)); //false
    delete isNaN; //true
    alert(isNaN(5)); //undefined
     

      delete  操作符 甚至可以删除全局对象Global的成员

    不能删除 var 申明的变量var flower="monkey";
    delete flower; //false
    alert(flower); // "monkey"
     

      用 var 申明的变量,delete 后 返回false.并没有删除成功 变量依然存在;

    注意:delete仅在删除一个不能删除的成员是,才会返回false


    ie下不能删除宿主对象下的变量在ie浏览器下
    window.flower="monkey";
    delete flower; //抛出异常
    alert(flower);

    在ff浏览器下
    window.flower="monkey";
    delete flower; //true
    alert(flower) //undefined

       可以看到 delete window的成员时,浏览器表现不一致

       window是javascript的宿主对象
        宿主对象可以是javascript执行环境自己定义的

       在ie6-8浏览器中,不能delete window.flower,浏览器会提示你"对象不支持该操作",也就是不能删除window下成员

    不能删除用函数名申明的函数function flower(){}
    delete flower; //true
    alert(flower);//undefined
     

        结果显示 delete 不能删除 用函数名申明的函数

     

    不能删除继承自原型的成员function flower(){};
    flower.prototype.name="monkey";
    var a1=new flower();
    a1.name="a1_monkey"
    alert(a1.name);//"a1_monkey"
    delete a1.name;//ture
    alert(a1.name);//"monkey"

       a1是flower的实例,通过实例来删除原型的和父类的成员是不可行的~

       如果一定要删除该属性("这里以name为例"),只能对原型进行操纵

    delete a1.constructor.prototype.name;


    DontDelete 特性delete 不能删除具有DontDelete特性的成员
    那什么是具有DontDelete特性的成员呢
    例如var 申明的变量,函数名申明的函数,Function对象的length等极少数几个拥有DontDelete特性
    delete 返回值false or true
    delete 仅在删除一个不能删除的成员时,才会返回false
    而其他情况下,删除如不存在的成员,或删除成功也都会返回ture
    也就是说 返回true 并不一定代表删除成功

       如 : 执行代码  alert(delete a); // true

            a是一个未申明且不存在的变量。 delete 依然返回的是true

    不同浏览器器之间的差异 (function(){
        delete arguments; // false ,而在Mozilla中返回的是true
        typeof arguments; // "object"
      })();
    巧妙的利用eval删除var 申明的变量eval('var flower = 1');
     alert(window.flower) //1
     alert(flower)// 1
     delete flower; // true
     alert(flower); // "undefined"

     var a=function(){};
     eval('var a = function(){}');
     delete a; // true
     alert(a); // "undefined"

     eval后的全局变量,变得不具备DontDelete特性,可以用eval删除;

     最后补充一条神奇的~睡觉前刚测试

     window.flower=1;

     delete flower 时对象会不支持此操作

     我们可以用 with(window){flower=1}; 然后 delete flower (记住是delete flower,不是delete window.flower ,ie不允许那么做)

     这样 window.flower就被删除了  :)

  • 相关阅读:
    Window7幻灯片字体显示混乱,难道真的是病毒么
    COCOS2DX 3.0 优化提升渲染速度 Auto-batching
    iOS 打印出视图中全部的子视图的名称
    【linux】学习2
    【编程之美】2.16 求数组的最大递增子序列
    【linux】学习1
    【编程之美】2.15 子数组之和的最大值(二维)
    【编程之美】2.14 求数组的子数组之和的最大值
    【QT】视频播放
    【编程之美】3.5 最短摘要的生成
  • 原文地址:https://www.cnblogs.com/amylis_chen/p/1745702.html
Copyright © 2011-2022 走看看