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

时间:2019-02-26 17:11:34

标签: javascript pointers reference garbage-collection

给出以下代码:

let obj = { data: 1 };
let ref1 = { data: obj };
let ref 2 = [ obj ];

如何删除obj,这样也会删除其引用? (我是说ref1.data === null && ref2.length === 0

有可能吗?

3 个答案:

答案 0 :(得分:1)

不能删除对象的所有引用。设置obj=null不会对其引用产生影响。您可以使用delete关键字删除对象的属性。

let obj = { data: 1 };
let ref1 = { data: obj };
let ref2 = [ obj ];
delete obj; // no effect
console.log(obj.data); // still have 1
console.log(ref1.data); // still have obj value
obj=null;
console.log(obj)  //null
console.log(ref1.data)  //still have obj value

答案 1 :(得分:1)

在javascript执行环境中的某处,有一些代码跟踪所有对象的引用,并在所有引用超出范围时运行内存垃圾回收。

您正在寻找类似的东西,除了您想以某种方式在特定的时间点找到对特定对象的所有活动引用,并将该引用更改为null。

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

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

答案 2 :(得分:0)

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

let obj = {
  data: 1
};
let ref1 = {
  data: obj
};
let ref2 = [obj];

delete obj.data;

console.log(obj);
console.log(ref1.data);