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键输出”~”的问题 (阅读:2144)
- MySQL drop database恢复(恢复方法同样适用MySQL drop table,delete,truncate table) (阅读:2086)
- Javascript中的delete操作符 (阅读:1446)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:愚人码头 来源: WEB前端开发
- 标签: delete
- 发布时间:2013-05-28 22:08:10
-
[927] WordPress插件开发 -- 在插件使用 -
[126] 解决 nginx 反向代理网页首尾出现神秘字 -
[51] 如何保证一个程序在单台服务器上只有唯一实例( -
[50] 整理了一份招PHP高级工程师的面试题 -
[48] CloudSMS:免费匿名的云短信 -
[48] Innodb分表太多或者表分区太多,会导致内 -
[48] 用 Jquery 模拟 select -
[48] 全站换域名时利用nginx和javascri -
[48] 海量小文件存储 -
[46] ps 命令常见用法
