2010-05-31 209 views
2

我需要學習如何以一個關聯數組傳遞給函數,這樣我可以做函數中執行以下操作:將參數傳遞給函數?

function someName($argums) { 
    if (gettype($argums) != 'array' || 
     !array_key_exists('myOneKey', $argums) || 
     !array_key_exists('myOtherKey', $argums)) {    
      return false; 
    } 

    /*do other stuff*/ 
} 

(這是我會怎麼做它在PHP中,我尋找的JavaScript。 )

回答

6

所有Javascript對象都是關聯數組,所以這非常簡單。實際上,您有幾個選項,因爲對象可以具有其自己的屬性,它從原型對象繼承的屬性,具有未定義值的屬性以及具有「假」值的屬性(undefined,null,0,""或當然, false)。 (這裏有一個對象沒有一個屬性,具有未定義值一之間的區別。)

檢查,看看如果對象屬性本身:您使用obj.hasOwnProperty

function someName(obj) { 
    if (!obj || 
     !obj.hasOwnProperty('myOneKey') || 
     !obj.hasOwnProperty('myOtherKey')) 
     return false; 
    } 
    // Do other stuff 
} 

檢查到看看對象具有通過其原型屬性本身:您使用propName in obj

function someName(obj) { 
    if (!obj || 
     !('myOneKey' in obj) || 
     !('myOtherKey' in obj)) 
     return false; 
    } 
    // Do other stuff 
} 

檢查,看是否對象有屬性(直接或通過原型),它不是未定義:你找一個未定義的值:

function someName(obj) { 
    if (!obj || 
     typeof obj.myOneKey === "undefined" || 
     typeof obj.myOtherKey === "undefined") 
     return false; 
    } 
    // Do other stuff 
} 

檢查,看是否該屬性是falsey(undefinednull0"",或課程,false),不管原因是:只要使用!

function someName(obj) { 
    if (!obj || 
     !obj.myOneKey || 
     !obj.myOtherKey) 
     return false; 
    } 
    // Do other stuff 
} 

無論如何,用法:

var obj = { 
    myOneKey: 'fred', 
    myOtherKey: 'barney' 
}; 
someName(obj); 
+0

我該如何用這樣的參數調用該函數? – 2010-05-31 11:43:53

+0

我不能使用in運算符而不是hasOwnProperty? – 2010-05-31 11:44:59

+0

@dfjhdfjhdf:顯然,當你問這個問題時,我正在增加對它的討論以及它們之間的區別。 :-) – 2010-05-31 11:50:40