Javascript从对象中删除对象

时间:2013-04-19 08:54:18

标签: javascript jquery object attributes

我有以下函数应删除对象中的对象,如下所示:

contactDeleteCounter++;
console.log(orderContactIds);
console.log(deletePosition);
console.log(orderContactIds[deletePosition]);
delete orderContactIds.deletePosition;
console.log(orderContactIds.deletePosition);
console.log(orderContactIds);
console.log(deletePosition);

问题在于我在Chrome中的一切都很棒,但Firefox中的Firebug显示了以下输出:

Object { 0={...}, 1={...}, 2={...}}
2
Object { id= "20" , type= "1" }

undefined
Object { 0={...}, 1={...}, 2={...}}
2

如您所见,该属性未定义,但当我查看该对象时,它仍然存在......?

2 个答案:

答案 0 :(得分:1)

答案是创建一个回调并创建异步Jquery:

function deleteCallback(deletePosition) {
    $.ajaxSetup({
        async : false
    });
    console.log(orderContactIds);
    console.log(deletePosition);
    console.log(orderContactIds[deletePosition]);
    delete orderContactIds[deletePosition];
    console.log(orderContactIds.deletePosition);
    console.log(orderContactIds);
    console.log(deletePosition);
    $.ajaxSetup({
        async : true
    });
}

答案 1 :(得分:0)

删除操作符仅删除引用,而不删除对象本身。如果它确实删除了对象本身,那么其他剩余的引用将是悬空的,就像C ++删除一样。 (并且访问其中一个会导致崩溃。要使它们全部转为null将意味着在删除或为每个对象额外的内存时有额外的工作。)

由于Javascript是垃圾收集的,因此您无需自行删除对象 - 当无法再引用它们时,它们将被删除。

如果您已完成对象的删除,则删除对象的引用会很有用,因为这会为垃圾回收器提供有关可以回收的内容的更多信息。如果对大对象的引用仍然存在,这可能导致它无法回收 - 即使程序的其余部分实际上没有使用该对象。