Javascript的变量与delete操作符

来源:未知 责任编辑:责任编辑 发表时间:2013-12-01 14:20 点击:
刚刚看到一篇好文, 对Javascript中的delete操作符分析得很透彻。在这里简单地介绍一下内容。
 
虽然是一个小小的delete操作符,其行为却异常复杂。
 
Javascript的变量
delete操作符删除的对象
对变量执行delete的情况
能删除的属性和不能删除的属性
能删除的变量和不能删除的变量
delete的返回值
Javascript的变量
实际上Javascript中,变量= 对象属性,这是因为Javascript 在执行脚本之前 会创建一个Global对象,所有的全局变量都是这个Global对象的属性, 执行函数时也会创建一个Activation对象,所有的局部变量都是这个Activation对象的属性。 如下例:
 
var global = 42;
this.global;    // 42, 可以通过this来访问Global对象
 
this.global2 = 12;
global2;        // 12
 
function foo() {
  var local = 36;
  // 不过无法直接访问Activation,
  // 因此无法通过foo.local 的方式来访问local变量
}
delete操作符删除的对象
C++中也有delete操作符,它删除的是指针所指向的对象。例如:
 
// C++
class Object {
public:
  Object *x;
}
 
Object o;
o.x = new Object();
delete o.x;     // 上一行new的Object对象将被释放
但Javascript的delete与C++不同,它不会删除o.x指向的对象,而是删除o.x属性本身。
 
// Javascript
var o = {};
o.x = new Object();
delete o.x;     // 上一行new的Object对象依然存在
o.x;            // undefined,o的名为x的属性被删除了
在实际的Javascript中,delete o.x之后,Object对象会由于失去了引用而被垃圾回收, 所以delete o.x也就“相当于”删除了o.x所指向的对象,但这个动作并不是ECMAScript标准, 也就是说,即使某个实现完全不删除Object对象,也不算是违反ECMAScript标准。
 
“删除属性而不是删除对象”这一点,可以通过以下的代码来确认。
 
var o = {};
var a = { x: 10 };
o.a = a;
delete o.a;    // o.a属性被删除
o.a;           // undefined
a.x;           // 10, 因为{ x: 10 } 对象依然被a 引用,所以不会被回收
另外,delete o.x 也可以写作delete o["x"],两者效果相同。
 
对变量执行delete的情况
由于变量也是Global 或者是Activation 对象的属性,所以对变量的delete操作也是同样的结果。
 
var global = 42;
delete global;     // 删除Global.global
 
function foo() {
  var local = 36;
  delete local;    // 删除Activation.local
}
能删除的属性和不能删除的属性
并不是所有的属性都能被delete。例如,prototype中声明的属性就无法被delete:
 
function C() { this.x = 42; }
C.prototype.x = 12;
 
var o = new C();
o.x;     // 42, 构造函数中定义的o.x
 
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • Gb2312转utf-8编码的方法(vbs+js)
  • 如何使用Ajax技术开发Web应用程序(1)
  • js跳转路径问题
  • JavaScript模仿桌面窗口
  • 用js检测两个线段是否相交
  • 运用JavaScript构建你的第一个Metro式应用程序(on Windows
  • 我知道的JavaScript -- 设计模式(桥接)应用之 – 验证器
  • 我是如何去了解jquery的(六),案例之幻灯片轮换
  • Jquery封装幻灯片效果
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1