2011-07-14 13 views

Respuesta

19

hasOwnProperty:

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

También puede utilizar the in operator, pero a veces da resultados no deseados:

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

¿Cuándo da resultados no deseados? – qwertymk

+5

@qwertymk: a veces desea que solo devuelva 'verdadero' para las propiedades que ha agregado en el objeto en sí, en lugar de las heredadas con prototipos. El operador 'in' se parece más a' hasattr' de Python. – icktoofay

5

El operador 'in'.

if ('school' in dictionary) 
+5

Sólo una nota: el operador 'in' funciona de esta manera en Python también y muchas personas les resulta preferible a la' has_key) método ('. – brandizzi

+2

@brandizzi, en realidad, has_key está en desuso, por lo que debe evitarse. –

9

ya sea con el operador in:

if('school' in dictionary) { … 

O, probablemente, soportada en más cisternas: hasOwnProperty

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

podría ser problemático en los casos fronterizos: typeof

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

Hay que no utiliza != undefined como no definidos es no una palabra clave y la semántica de lo varían entre los navegadores:

if(dictionary.school != undefined) { … 

4

También puede probar:

if(dictionary.hasOwnProperty('school')) 

El método hasOwnProperty sólo se evaluará a true si la propiedad es en realidad en la instancia, y no simplemente heredada del prototipo - como es el caso con in.

Por ejemplo, la evaluación de ('toString' in myObject) será true, mientras que myObject.hasOwnProperty('toString') será false.

0

O incluso,

if(dictionary.school!=undefined) 
Cuestiones relacionadas