2010-05-31 3 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 являются ассоциативными массивами, поэтому это очень просто. На самом деле у вас есть несколько опций, потому что объект может иметь собственные свойства, свойства, которые он наследует от своего объекта-прототипа, свойства с неопределенными значениями и свойства со значениями «falsey» (undefined, , 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 (undefined, null, 0, "", или, конечно, , false), независимо от того, почему: Просто используйте !:

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

несмотря на это, использование:

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

И как я могу назвать эту функцию такими аргументами? –

+0

И не могу ли я использовать оператор in вместо hasOwnProperty? –

+0

@dfjhdfjhdf: Я добавлял обсуждение этого и различие между ними, поскольку вы задавали вопрос, по-видимому. :-) –

Смежные вопросы