如何删除Javascript中的所有对象引用?

如何删除Javascript中的所有对象引用?,javascript,pointers,reference,garbage-collection,Javascript,Pointers,Reference,Garbage Collection,给定以下代码: let obj = { data: 1 }; let ref1 = { data: obj }; let ref 2 = [ obj ]; 如何删除obj的引用也会被删除?(我的意思是ref1.data==null&&ref2.length==0) 是否可能?您可以从对象中删除属性: 让obj={ 数据:1 }; 设ref1={ 资料来源:obj }; 设ref2=[obj]; 删除对象数据; 控制台日志(obj); console.log(参考1.data)不能删除对象的所

给定以下代码:

let obj = { data: 1 };
let ref1 = { data: obj };
let ref 2 = [ obj ];
如何删除obj的引用也会被删除?(我的意思是
ref1.data==null&&ref2.length==0


是否可能?

您可以从对象中删除属性:

让obj={
数据:1
};
设ref1={
资料来源:obj
};
设ref2=[obj];
删除对象数据;
控制台日志(obj);

console.log(参考1.data)不能删除对象的所有引用。设置
obj=null
不会对其引用产生影响。您可以使用
delete
关键字删除对象的属性

let obj={data:1};
设ref1={data:obj};
设ref2=[obj];
删除obj;//无效
console.log(对象数据);//还有1个
console.log(参考1.data);//还有obj值吗
obj=null;
console.log(obj)//null

console.log(ref1.data)//仍然有obj值
在javascript执行环境中的某个地方,有一些代码跟踪对对象的引用,并在所有引用超出范围时运行内存垃圾回收

您正在寻找类似的内容,只是希望在特定时间点找到特定对象的所有活动引用,并将该引用更改为null

我认为这是不可能的,除非您想编写自己的javascript解释器


但是,如果你备份一个关卡并解释为什么要这样做,也许有一种方法可以实现你的目标。

不,这是不可能的。你可以删除它的所有属性,但不能只是将它擦干净。将所有内容都放入一个函数中,函数执行后,所有引用都将被删除。我无法将所有引用放入函数中,因为它们位于应用程序的不同部分。这就是我实际正在做的,但我想知道是否有可能完全删除该对象(实际上,我在数组和ref1.data中仍然有空对象)我已经考虑了几个小时,并得出了相同的结论…问题是我在一个应用程序中有不同的资源集合(它们并不都相等,因为它们对这些资源有不同的组合)。我想删除其中一个资源,以便将其从所有这些集合中删除,但我认为这是不可能的…我必须逐个更新它们以删除引用。我不确定我是否完全理解您的应用程序,但这样做如何:a)有一个“资源”对象的“主存储区”。b) 在所有不同的“集合”中,不要存储“资源”对象本身,而只存储允许对象位于“主存储”中的引用(例如索引、哈希或键)。c) 当您要全局删除资源时,请将其从主存储中删除,这将导致从任何“集合”中查找该资源的任何尝试返回null或引发错误。