2011-07-14 17 views

Odpowiedz

19

hasOwnProperty:

if(Object.prototype.hasOwnProperty.call(dictionary, key)) { 
    // ... 

Można również użyć the in operator, ale czasami daje niepożądane skutki:

console.log('watch' in dictionary); // always true 
+0

Kiedy daje niepożądane rezultaty? – qwertymk

+5

@qwertymk: Czasami ma on zwracać tylko wartość "true" dla właściwości dodanych do samego obiektu, a nie dziedziczonych z prototypami. Operator 'in' jest bardziej podobny do' hasattr' w języku Python. – icktoofay

5

Operator "w".

if ('school' in dictionary) 
+5

Tylko uwaga: 'operator in' działa w ten sposób w Pythonie i zbyt wiele osób uważa za pożądane do' has_key() 'metoda. – brandizzi

+2

@brandizzi, właściwie has_key jest przestarzałe, więc powinno się go unikać. –

9

Każda z operatorem in:

if('school' in dictionary) { … 

Albo prawdopodobnie obsługiwane więcej stacje paliwa: hasOwnProperty

if(dictionary.hasOwnProperty('school')) { … 

mogą okazać się problematyczne w przypadkach granicznych: typeof

if(typeof dictionary.school != 'undefined') { … 

Trzeba nie używać != undefined jako niezdefiniowany jest nie kluczowe i semantyka nim różnią się w zależności od przeglądarki:

if(dictionary.school != undefined) { … 

4

Możesz też spróbować:

if(dictionary.hasOwnProperty('school')) 

Sposób hasOwnProperty oceni tylko true jeżeli nieruchomość jest faktycznie na przykład, a nie po prostu dziedziczone od prototypu - jak jest w przypadku z in.

Przykładowo evaluting ('toString' in myObject) będzie true, a myObject.hasOwnProperty('toString') będzie false.

0

Albo nawet,

if(dictionary.school!=undefined) 
Powiązane problemy