Kingle
你所有不曾料想过的问题,都会随着时间的推移而与你不期而遇

       很少使用javascript的delete,最近因为一个小bug发现删除引用类型对象的时候有一点不同。如下面例子:

 

         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指向的对象仍然没有删除。

 

       更多关于javascript delete关键字的原理,推荐:

       http://perfectionkills.com/understanding-delete/

       翻译版本:

       http://www.ituring.com.cn/article/7620

 

 

posted on 2013-09-28 20:15  Kingle  阅读(489)  评论(1编辑  收藏  举报