据我所知,在这种情况下:
var x = [];
var y = {};
y.someProp='asd';
这不起作用:
x.push(y);
我想要做的是将y的引用添加到x,以便稍后我将“删除y;”我希望它也可以从数组x中删除。
答案 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);