删除作为函数参数的对象的正确方法是什么?我有以下示例代码:
var theObjects = new Object();
theObjects['first'] = { x:0, y:0 };
theObjects['second'] = { x:0, y:0 };
theObjects['third'] = { x:0, y:0 };
function somefunc(obj){
// that
for(var k in theObjects){
if(theObjects[k] == obj){
delete theObjects[k];
}
}
// or that
delete obj;
}
$(function(){
somefunc(theObjects['first']);
});
我的猜测是第一种方法是正确的,因为我删除了对象本身。但另一方面,对象通过引用传递给函数。所以当我删除时,我是否删除了对象或对它的引用?
答案 0 :(得分:3)
你的问题接近这个答案:
Deleting Objects in JavaScript
"删除操作符仅删除引用,而不删除对象本身。如果它确实删除了对象本身,其他剩余的引用将是悬空的,就像C ++删除一样。"
delete
仅适用于属性,因此第一种方法是正确的。如果变量在全局范围内定义,则它将是window
的属性,也将被删除。因此,您的第delete obj
行不会做任何事情。
这里有一个小问题来说明这一点: