论坛首页 Web前端技术论坛

js中delete机制的一些理解

浏览 6154 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2013-03-20  
delete关键字用于回收对象;主要删除全局变量和字段

var a=10;
delete a;
alert(a);

结果是unified
function User(){
  this.name="demo";
}
var user = new User();
user.name="ddd";
delete user.name;
alert(a);

结果是unified

但是
function User(){
  var name = "ddd";
  delete name;
  alert(name);
}

就是错误的;

现在有些误解,如果我直接赋值null和delete有什么区别呢?
   发表时间:2013-03-21  
设置为undefined或者null仅仅是移除了属性和值的关联,不是真正的删除属性。
0 请登录后投票
   发表时间:2013-03-23   最后修改:2013-03-23
沙舟狼客 写道
delete关键字用于回收对象;主要删除全局变量和字段

但是
function User(){
  var name = "ddd";
  delete name;
  alert(name);
}

就是错误的;

现在有些误解,如果我直接赋值null和delete有什么区别呢?


函数体类的自动变量是在栈里面分配的,函数执行完自动回收,无需显式delete
0 请登录后投票
   发表时间:2013-03-25   最后修改:2013-03-25
var x = {a:1, b:2}
for(var m in x){ alert(m) }   //a,b

i.a=null;
for(var m in x){ alert(m) }   //a,b

delete i.a
for(var m in x){ alert(m) }   // b

0 请登录后投票
   发表时间:2013-03-25   最后修改:2013-03-25
    function User(){  
      var name = "ddd";  
      delete name;  
      alert(name);  
    }  

这个name 依旧是 ddd 的原因是,delete 不能删除这类属性。

http://www.cnblogs.com/jfp888/archive/2011/06/09/2076127.html

以下是可以的
function User(){  
  this.name = "ddd";  
  delete name;
}  
function caller(){
  var i = new User();
  alert(i.name);
}
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics