2015-12-04 33 views
0
var a = "the letter a"; 
var obj = {}; 

obj.brovo = "the letter b"; 
obj.charlie = "the letter c"; 

if (!obj.alpha) obj.alpha = a; 

因爲我想在我的代碼在不同的點使用,並多次我想爲它被用作以下將使用它:如何使用函數向JavaScript對象添加屬性名稱和值?

isNotSet(obj.alpha, a); 

我想這等同obj.alpha = a;

我開始用下面的函數:

function isNotSet (arg1, arg2) { 
    if (!arg1) arg1 = arg2; 
    return arg1; 
} 
+1

你不需要返回值。由於變量通過引用 –

+0

傳遞爲什麼投票?這是:(這是我的第一個問題在這裏。 – Esko

回答

3

的解決方案僅僅是一個簡單的一行:

obj.alpha = obj.alpha || a; 

如果你真的需要一個功能,你可以用它:

function isNotSet(obj, arg1, arg2) { 
    obj[arg1] = obj[arg1] || arg2; 
} 

你應該知道,雖然,這兩個這種解決方案和您的建議的解決方案將覆蓋如果obj[arg1]設置爲false值(或任何其他falsy值)。

如果要正確處理這些值,最簡單的方法是:

function isNotSet(obj, arg1, arg2) { 
    if(typeof obj[arg1] !== "undefined" && obj[arg1] !== null) { return; } 
    obj[arg1] = arg2; 
} 
+0

也許0被視爲。有效儘管 – Comptonburger

+0

@Comptonburger - 我在答覆中提到這一缺點 –

+0

@Comptonburger - 增加其他功能,只有默認值'null'和'undefined'還是不檢查財產所有權 –

0

我可以用下面的函數來實現:

isNotSet('alpha', a); 

我只是將arg1作爲屬性名稱,然後將其添加到對象中,然後使用屬性名稱將該值分配給該對象。

function isNotSet (arg1, arg2) { 
    if (!obj[arg1]) obj[arg1] = arg2; 
} 
+1

這不是最好的解決方案,因爲對象正在被訪問通過它的全球範圍內,這將只** **工作名爲'obj'在你的代碼的對象變量。 –

+1

您可能需要使用'hasOwnProperty',而不是'!OBJ [ARG1]'那要看你不會如何處理'null','undefined','0','FALSE'和空字符串。 – Sulthan

相關問題