2013-02-07 34 views
0

我有這樣的代碼......如何創建一個函數來檢查的JavaScript對象的屬性,並設置它,如果它不存在

var suitcase = { 
    shirt: "Hawaiian" 
}; 

var checkProp = function(obj, prop, val){ 
if(obj.hasOwnProperty(prop)){ 
    console.log(obj.prop); 
} else { 
    obj.prop = val; 
    console.log(obj.prop); 
} 
}; 
checkProp("suitcase","shorts","blue"); 

,當我運行它,它返回undefined。表面看起來很好。沒有語法問題或類似的東西。我需要做些什麼來實現這個目標?

回答

0

suitcase是一個var,而不是一個字符串。相反,它應該讀

checkProp(suitcase,'shorts','blue'); 
0

傳遞Object本身,而不是它的名字:

checkProp(suitcase,"shorts","blue"); 

此外,使用obj[prop]代替obj.prop
(帶obj.prop,您所訪問的prop財產的對象,從字面上看,不是你要找的屬性。)比

其他,你的代碼工作。它可以縮短這個樣子,雖然:

var checkProp = function(obj, prop, val){ 
    obj[prop] = obj[prop] || val; // If obj[prop] exists, set it to itself (does nothing), otherwise, set it's content to `val`. 
    console.log(obj.prop); 
}; 
+0

這是行不通的,他已經實現了它,如果'prop'是在'obj'原型的方式,他只是檢查對象本身的道具。 – 0xor1

0

你想要什麼可能是OBJ [道具]代替obj.prop

0

你有幾個不同的選擇,但我認爲您的解決方案可能會工作。它只是有一個小錯誤。在你的函數調用中:

checkProp('suitcase', 'shorts', 'blue); 

你有"suitcase"定義爲一個字符串,當它應該是一個對象。嘗試修復它,看看它是否工作。

編輯:

另一種選擇,你可以嘗試將是這樣:

var checkProp = function(obj, prop, val){ 
    if(obj) { 
     if(!obj[prop]) { 
      obj[prop] = val; 
     } 
     if(window.console && window.console.log) { 
      console.log(obj[prop]); 
     } 
    } 
}; 
+0

什麼瀏覽器不支持'console/console.log',你必須檢查它? o.O這個問題似乎有點超出範圍。 – Cerbrus

+0

我喜歡你的功能。它更簡潔一點。我的功能比較囉嗦。另外,你有檢查你的函數是否支持登錄到控制檯,這是非常有用的。 – Jonathan

+0

@Cerbrus我在使用IE 9時遇到了問題。調試器沒有自動附加,如果我沒有打開它的開發工具,它會拋出一個錯誤。這只是一個額外的支票。這是有點超出範圍,但我寧願發佈一個答案,將在所有瀏覽器中工作。這也可能是我的設置有點不同。無論哪種方式,最好是安全而不是抱歉。 – War10ck

0
var suitcase = { 
    shirt: "Hawaiian" 
}; 

var checkProp = function(obj, prop, val){ 
    if(obj.hasOwnProperty(prop)){ 
     console.log(obj[prop]); 
    } else { 
     obj[prop] = val; 
     console.log(obj[prop]); 
    } 
}; 
checkProp(suitcase,"shorts","blue"); 
相關問題