javascript delete操作符

javascript delete 使用示例

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

   创建一个名为flower的对象

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

   delete 操作 删除这个成员

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

 

javascript delete 使用示例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就被删除了  :)

来源:http://www.cnblogs.com/windows7/archive/2010/03/28/1698387.html

加支付宝好友偷能量挖...


评论(0)网络
阅读(78)喜欢(1)JavaScript/Ajax开发技巧