Javascript - 删除对象作为函数的参数

时间:2015-12-29 20:42:41

标签: javascript object reference

删除作为函数参数的对象的正确方法是什么?我有以下示例代码:

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']);
});

我的猜测是第一种方法是正确的,因为我删除了对象本身。但另一方面,对象通过引用传递给函数。所以当我删除时,我是否删除了对象或对它的引用?

1 个答案:

答案 0 :(得分:3)

你的问题接近这个答案:

Deleting Objects in JavaScript

"删除操作符仅删除引用,而不删除对象本身。如果它确实删除了对象本身,其他剩余的引用将是悬空的,就像C ++删除一样。"

delete仅适用于属性,因此第一种方法是正确的。如果变量在全局范围内定义,则它将是window的属性,也将被删除。因此,您的第delete obj行不会做任何事情。

这里有一个小问题来说明这一点:

https://jsfiddle.net/oyyw7k5j/