2010-05-31 173 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