javascript - 将对象转换为 JSON 字符串并将其置空

标签 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 的属性会发生什么情况?

最佳答案

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

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

关于javascript - 将对象转换为 JSON 字符串并将其置空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38754461/

相关文章:

java - 如何在android中获取json值

java - 使用单个 for 循环对 JSONArray 进行排序

javascript - 没有嵌套 View 的嵌套 ui-router 状态?

java - GWT 无限滚动并丢弃列表开始结果

javascript - 了解去抖。 thunks 和赋值返回

javascript - 使用ngResource解决服务中的业务处理

javascript - AngularJS 动态过滤未更新

angularjs - 过期的 JWT token - 如何刷新 token

javascript - expressJS 路由器规划 - 如何设置有效的路由器

c# - Json.NET解析对象中的数组