2012-02-09 82 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)); 
相關問題