不多使用javascript的delete,最近由于一个小bug发现删除引用类型对象的时候有一点不一样。以下面例子:javascript
var testVar = { a : { test : 1 } }, test1 = {}, test2 = {}; test1.a = testVar.a; test2.a = testVar.a; /* delete test1.a; console.log(test1.a); // undefined console.log(test2.a); // Object {test: 1} console.log(testVar.a); // Object {test: 1} */ delete testVar.a; console.log(test1.a); // Object {test: 1} console.log(test2.a); // Object {test: 1} console.log(testVar.a); // undefined
经过测试能够看出,javascript的delete删除的对象若是是一个引用类型,那它删除的不是引用的对象,而是指向该引用对象的指针。所以,即便 delete testVar.a ,test1.a指向的对象仍然没有删除。html
更多关于javascript delete关键字的原理,推荐:java
http://perfectionkills.com/understanding-delete/web
翻译版本:测试
http://www.ituring.com.cn/article/7620spa