我有以下函数应删除对象中的对象,如下所示:
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
如您所见,该属性未定义,但当我查看该对象时,它仍然存在......?
答案 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是垃圾收集的,因此您无需自行删除对象 - 当无法再引用它们时,它们将被删除。
如果您已完成对象的删除,则删除对象的引用会很有用,因为这会为垃圾回收器提供有关可以回收的内容的更多信息。如果对大对象的引用仍然存在,这可能导致它无法回收 - 即使程序的其余部分实际上没有使用该对象。