将对象转换为JSON字符串并将其null

时间:2016-08-03 22:08:53

标签: javascript angularjs json memory-management garbage-collection

我仍然在学习如何在javascript中使用引用和垃圾收集器,因此在我的工作中减少了膨胀和泄漏。我创建了一个包含对象的工厂,该值可以传递给它或从中获取。

.factory('lib', function(){
   var lib={};
   return {
     set: function(id,value,isObj){
       if(isObj){
         lib[id]=JSON.stringify(value);
       }else{
         lib[id]=value;
       }
     },
     del: function(id){
       lib[id]=null;
     }
   };
})

.controller('testCtrl',function(lib,$timeout){
  lib.set("1",{'name':'James','sureName':'Potter'},true);
  $timeout(function(){
    lib.del("1");
  },1000);
})

所以我的问题是;通过将我的obj转换为字符串,后来转换为字符串,现在作为空值。我的原始obj是否可以访问并被垃圾收集器收集? obj的属性发生了什么,我试图变成字符串?

1 个答案:

答案 0 :(得分:0)

由于对象是从函数参数列表中的对象文字创建的,因此没有对set()函数之外的对象的引用。唯一的引用是局部变量value,当set()函数返回该变量消失时,对象可以被垃圾收集。所有它的属性都可以,因为它们也包含文字,而不是其他变量引用的值。

您没有将对象转换为字符串",您只需创建一个包含对象表示的新字符串。字符串和对象完全独立。