将对象的引用推送到数组

时间:2010-04-23 08:25:06

标签: javascript arrays object

据我所知,在这种情况下:

var x = [];
var y = {};

y.someProp='asd';

这不起作用:

x.push(y);

我想要做的是将y的引用添加到x,以便稍后我将“删除y;”我希望它也可以从数组x中删除。

4 个答案:

答案 0 :(得分:2)

您正在混合变量,引用和对象。

执行delete y;删除变量y。由于变量不再存在,它自然不再具有值。因此,包含变量的引用已经消失。

但是,删除变量本身不会删除它引用的对象。数组仍包含对象的引用,这些引用都不依赖于变量的存在。

实际上没有办法直接删除对象。您通过销毁对它的所有引用来删除对象,而不是相反。您希望对象删除它的引用,这根本不是它的工作原理。

答案 1 :(得分:0)

这不是delete的工作方式。它将删除传递给它的对象引用 - 而不是对同一对象的任何其他引用。你在这里寻找类似“弱引用”的东西,我不知道在JavaScript中实现它们的任何方法。

答案 2 :(得分:0)

这会有帮助吗?

Var x=[{}]; var y=x[0];

编辑: 对不起,我第一次回答时有点简短。我开始问的问​​题是:为什么y首先需要在阵列之外“存在”?难道你不能只创建一个对象数组并使用delete或array.splice()在需要时删除对象吗?

其次,如果y需要存在于数组之外,那么您需要做的是创建引用数组索引的属性,还是可以扫描数组以找到正确的对象引用的实用程序函数。去掉。换句话说,像是

var x=[]; var y={}; y.arrayIndex=(x.push(y)-1);

// later on, you want to get rid of y

delete x[y.arrayIndex]; delete y;

答案 3 :(得分:0)

  

这不起作用:    

x.push(y);

当然,它会完全按预期工作 - 将y的值推送到您创建的数组。

delete运算符专门用于删除对象的属性,如果运算符后面的表达式没有解析为属性,则根本不会发生任何事情。

var y = {"someprop":true};

delete y;
alert(y.someprop); // alerts "true"

在浏览器窗口中尝试,将以下内容粘贴到地址栏中,然后按Enter键:

javascript:var y = {"someprop":true}; delete y; alert(y.someprop);