2013-02-02 43 views
0

我很抱歉,我不是一個很好的,但 我想創建這樣的Javascript:傳遞價值具有功能陣列屬性

function show (message['head':'error','body':'msg']) 
{ // 'error' and 'msg' and the default values 
alert(message[head]); 

} 

show ({'head' : 'this is head', 'body' : 'this is body'}); 

正確的方法是什麼上述方法正常工作的功能?

+0

相關,甚至是重複的:http://stackoverflow.com/questions/10813852/concise-way-to-accept-an-options-object-as-an-argument-falling-back-to-缺省 –

回答

4

像這樣:

function show (message) 
{ 
    alert(message.head); 
    // or 
    alert(message['head']); // Note the quotes 
} 

你調用它是好的。

要提供的默認設置,爲David points out,您可以使用curiously powerful || operator

function show (message) 
{ 
    var head = message.head || 'error', 
     body = message.body || 'msg'; 

    alert(head); 
} 

(以上是從大衛的做法,因爲它避免了改變已傳遞的message對象,這通常不是略有不同一個好主意,因爲該功能不擁有該對象,調用者。)

這工作,因爲如果head(例如)不是message對象上的話,那就是falsey等head = message.head || 'error'最終分配'error'head。這是一個方便的技巧,但是有一個問題:如果head已經有錯誤的值,並且這是有效的,那麼您不想使用||技巧。相反,你可以使用in檢查:

function show (message) 
{ 
    var head = 'head' in message ? message.head : 'error', 
     body = 'body' in message ? message.body : 'msg'; 

    alert(head); 
} 

將使用從message的值,如果它的存在,無論它是否是falsey。

+0

'in'檢查原型。你確定這是安全的嗎? – 0x499602D2

+0

@大衛:我認爲這是適當的,是的。否則,即使我們查看'message.head',我們會看到一個不同的值(如果message是其原型中具有head的對象),我們仍然處於使用默認值的奇怪位置。有很多地方你想'hasOwnProperty'來代替,但對我來說,這不是其中之一。 –

+0

@ T.J.Crowder感謝您的幫助。但是如果我不創建'新變量',我該怎麼辦? 例如: message.head ='head'in message? message.head:'錯誤'; –

1

如果對象沒有屬性,則訪問該屬性將返回值undefined。我們可以將其與邏輯OR ||運算符一起使用,以將默認值分配給對象。

function show(message) { 
    message.head = message.head || 'error'; 
    message.body = message.body || 'msg'; 

    alert(message.head); 
} 

如果message.head未定義,其將分配給"error"的對象屬性,或者它會以其他方式保持其值。


由於Crower指出,這有一個潛在的「疑難雜症」爲空字符串可以推斷爲導致缺省值的不必要分配的falsy值。因爲它會檢查,如果該屬性實際上是在對象上使用此版本:

function show(message) { 
    message.head = message.hasOwnProperty('head') ? message.head : 'error'; 
    message.body = message.hasOwnProperty('body') ? message.body : 'msg'; 

    alert(message.head); 
} 
+1

+1我錯過了有關默認值的一點。您可能需要警告有關錯誤屬性值的「疑難雜症」(例如,如果「message.head」可以有意義地爲「0」或「」「',那麼您不希望不加區分地執行」||「錯誤'')。 –

+1

也許值得一提的是,這個*改變了*傳入的對象。 –

0

Plesae檢查This

,並標記正確的答案滿足你。

function show(message){ 
    alert(message['head']); 
}