|
javascript delete的一些技巧,主要是从对象中删除一个属性,或从数组中删除一个元素。具体的使用方法,可以参考下面的代码。
javascript delete example 复制代码 代码如下: var flower={}; flower.name="oop"; delete flower.name; //true alert(flower.name); //undefined 创建一个名为flower的对象 flower具有成员name,值"oop"; delete 操作 删除这个成员 删除成功,已不存在flower.name这个成员 javascript delete example 2 复制代码 代码如下: alert(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就被删除了 :)
JavaScript delete操作符应用实例 |
|