2012-02-09 25 views
7

我想知道这是否可能。基本上我有几个对象,我传递给一个函数,并在某些条件下,我希望该函数将该对象设置为null。JavaScript - 如何/我可以将函数中的对象引用设置为null?

Ex。

var o = {'val' : 0}; 

f = function(v) 
{ 
    v = null; 
}; 

f(o); // Would like this to set 'o' to null 

不幸的是,我似乎只能将函数的参数设置为null。在调用函数'o'后,仍然会引用一个对象。

那么,它甚至有可能做到这一点?如果是这样,怎么样?

回答

7

,你有两个选择:

1)您可以f(o)邻返回一个新的值,并将其赋值邻像这样:

var o = {'val' : 0}; 
o = f(o); 
// o == null 

里面的

f(),则返回 o的新值。

function f(v) { 
    if (whatever) { 
     return(null); 
    } 
} 

2)你把ö到另一个对象并传递到该容器对象的引用进f()

function f(v) { 
    if (whatever) { 
     v.o = null; 
    } 
} 

var c = {}; 
c.o = {'val' : 0}; 

f(c); 
// c.o == null; 

JavaScript语言并没有真正的指针像在C/C++,让你一个指针传递给一个变量,然后伸出手通过该指针,变量的值从函数内改变。相反,你必须通过其他两种方式之一来完成。对象和数组通过引用传递,因此您可以从函数返回原始对象。

2

不知道到底真正使用的,但如果你重组了一下,你可以这样做:如果你想改变的o值时f(o)被称为

var o = {'val' : 0}; 

var f = function(v) 
{ 
    if(something){ 
     return null; 
    }else{ 
     return v; 
    } 
}; 

o = f(o); 
2

JavaScript总是按“值”传递函数参数。这意味着函数不能改变函数外部的变量指向的内容。

但是,当您将对象传递给函数时,传递的“值”是对实际对象的引用,而不是对象的副本。因此,虽然您不能将外部变量设置为null或另一个对象,但您可以修改该对象的内容。这意味着你可以做这样的事情:

var containerObj = {'o' : {'val' : 0} }; 

f = function(v) { 
    v.o = null; 
}; 

f(containerObj.o); // This property would be set to null successfully. 

显然创造了一堆容器中的对象的,所以您可以将它们传递给函数是不是很漂亮,但它是如何做这件事。

但我建议与詹姆斯蒙塔涅的建议让函数返回一个对象或null并将结果赋值给您的变量。

1

我来到这里有同样的问题。虽然包装的答案有效,但它很丑,我的功能是异步的,所以我不能返回空值。

我想onull的原因是,后来我用if (o) //do something,这可能是为什么OP等人想将它设置为null。因此,我的解决方案,虽然不是一个问题的确切问题,是

var o = {'val' : 0}; 
f = function(v) { 
    v.isNull = true; 
} 
if (!o.isNull) // do something 
0

做这将是创建一个名为NULL全局变量,并设置它为null

var NULL = null 

最简单的方法然后,您可以将现有变量设置为NULL,而无需修改原始对象。

var NULL = null; 
var original = {}; 
var ptr = original; 
ptr = NULL; 
console.log("original is not null = " + (original!==null)); 
console.log("ptr is null = " + (ptr===null)); 
相关问题