0

我有以下函数应该删除以下 id 下的对象中的对象:

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

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

4

2 回答 2

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
    });
}
于 2013-04-19T10:36:28.147 回答
0

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

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

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

于 2013-04-19T08:57:28.560 回答