Javascript中的delete操作符
变量
1 | var global = 1; |
2 | this .global; // 1, 可以通过this来访问Global对象 |
3 | this .global2 = 2; |
4 | global2; // 12 |
5 | function foo() { |
6 | var local = 36; |
7 | // 不过无法直接访问Activation, |
8 | // 因此无法通过 foo.local 的方式来访问local变量 |
9 | } |
delete操作符
1 | var o = {}; |
2 | var a = { x: 10 }; |
3 | o.a = a; |
4 | delete o.a; // o.a属性被删除 |
5 | console.log(o.a); // undefined |
6 | console.log(a.x); // 10, 因为{ x: 10 } 对象依然被 a 引用,所以不会被回收 |
变量是不能删除的
01 | var global = { |
02 | a: 123, |
03 | b: { |
04 | c: 1345 |
05 | } |
06 | }; |
07 | delete global; //无效 |
08 | console.log(global) |
09 |
10 | obj = { |
11 | a: 123 |
12 | }; |
13 | delete obj; // 删除obj全局变量,window对象的obj属性 |
14 | console.log(obj); //obj is not defined |
原型中声明的属性和对象自带的属性无法被删除
//原型中声明的属性无法被删除
function Obj() { this.x = 1; }
Obj.prototype.x = 2;
var o = new Obj();
console.log(o.x); // 1, 构造函数中定义的o.x
delete o.x;
console.log(o.x); // 2, prototype中定义的o.x,即使再次执行delete o.x也不会被删除
//对象自带的属性无法被删除
var strings="123456";
console.log(strings.length);//6
delete strings.length;
console.log(strings.length);//依然是6
eval语句下的几个例外
eval("var x = 42;");
x; // => 42
delete x;
x; // => ReferenceError: x is not defined
eval("function f() { return 12; }");
f(); // => 12
delete f;
f(); // => ReferenceError: f is not defined
//eval执行的代码中,通过var声明的变量虽然与正常的var声明变量同属于Global对象,
// 但它们不具有DontDelete特性,能被删除。
eval("(function () {" +
" var x = 42;" +
" delete x;" +
" return x;" +
"})();")
// => 42
// eval的代码中的函数内通过var定义的变量具有DontDelete,不能被删除。
delete的返回值
function C() { this.x = 42; }
C.prototype.y = 12;
var o = new C();
delete o.x; // true
o.x; // undefined
"x" in o; // false
// o.x存在并且没有DontDelete,返回true
delete o.y; // true
o.y; // 12
// o自身没有o.y属性,所以返回true
// 从这里也可以看到prototype链的存在,对象自身属性和prototype属性是不同的
delete o; // false
// Global.o拥有DontDelete特性所以返回false
delete undefinedProperty; // true
// Global没有名为undefinedProperty的属性因此返回true
delete 42; // true
// 42不是属性所以返回true。有的实现会抛出异常(违反ECMAScript标准)
var x = 24;
delete x++; // true
x; // 25
// 被删除的是x++的返回值(24),不是属性,所以返回true
建议继续学习:
- MySQL命令行按Delete键输出”~”的问题 (阅读:1673)
- MySQL drop database恢复(恢复方法同样适用MySQL drop table,delete,truncate table) (阅读:1542)
- Javascript中的delete操作符 (阅读:1049)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:愚人码头 来源: WEB前端开发
- 标签: delete
- 发布时间:2013-05-28 22:08:10
- [68] IOS安全–浅谈关于IOS加固的几种方法
- [66] Twitter/微博客的学习摘要
- [64] 如何拿下简短的域名
- [61] android 开发入门
- [60] find命令的一点注意事项
- [59] Go Reflect 性能
- [57] 流程管理与用户研究
- [56] Oracle MTS模式下 进程地址与会话信
- [56] 图书馆的世界纪录
- [55] 读书笔记-壹百度:百度十年千倍的29条法则