2012-02-22 23 views
32
If(somevar.hasOwnProperty('someProperty')) { 
// do something(); 
} else { 
// do sometingelse(); 
} 

¿Cuál es el uso/explicación correcta de hasOwnProperty('someProperty')?Javascript ¿cuál es la propiedad en hasOwnProperty?

¿Por qué no podemos simplemente usar somevar.someProperty para verificar si un objeto somevar contiene propiedad con el nombre someProperty?

¿Qué es una propiedad en este caso?

¿Qué propiedad tiene este javascript?

+2

http://stackoverflow.com/questions/2600085/hasownproperty-in-javascript –

+0

Cuando hice esta pregunta, pensé que era una función que verificaba algunos html. Ahora lo veo comprobando un objeto o método de JavaScript para una 'variable' dentro de ese objeto o método. THX! – FLY

+0

Eche un vistazo a https://developer.mozilla.org/es/JavaScript/Reference/Global_Objects/Object/HasOwnProperty –

Respuesta

61

hasOwnProperty devuelve un valor booleano que indica si el objeto al que está llamando tiene una propiedad con el nombre del argumento. Por ejemplo:

var x = { 
    y: 10 
}; 
console.log(x.hasOwnProperty("y")); //true 
console.log(x.hasOwnProperty("z")); //false 

Sin embargo, no mira la cadena prototipo del objeto.

Es útil usarlo cuando enumera las propiedades de un objeto con el constructo for...in.

Si desea ver todos los detalles, el ES5 specification es, como siempre, un buen lugar para buscar.

+3

Puntos de bonificación para la cadena de prototipos. Todavía estoy tratando de averiguar a qué se refiere cuando no está llamado a un objeto ...no es 'ventana' –

+0

@KristofferSHansen - Me lo estaba preguntando también, pero la pregunta se ha editado, por lo que ahora se está llamando a un objeto. Cuando no lo es, se produce un error. –

+0

Supongo que eso cambia las cosas. Sin embargo, no se produjo ningún error al ejecutar desde la consola en Chrome. –

7

comprueba:

devuelve un valor booleano que indica si un objeto tiene una propiedad con el nombre especificado

El método hasOwnProperty devuelve verdadero si el objeto tiene una propiedad con el nombre especificado, falso si no lo hace . Este método no verifica si la propiedad existe en la cadena de prototipos del objeto; la propiedad debe ser un miembro del objeto mismo.

Ejemplo:

var s = new String("Sample"); 
document.write(s.hasOwnProperty("split"));      //false 
document.write(String.prototype.hasOwnProperty("split"));   //true 
+0

y - 1?/¿Me entiendes mal? –

+1

He dado un -1 porque tu respuesta inicial fue una oración breve y completamente incoherente, que luego se actualizó a una frase ligeramente más larga, ligeramente más coherente, pero totalmente inexacta. –

+0

@ amnotiam- pero creo que está muy claro ahora ... es porque mi problema con Internet no puedo publicar más .......... –

0

Se checks if an object has a property. Funciona igual que if(obj.prop), hasta donde yo sé.

+3

'obj.prop' sigue la cadena del prototipo,' hasOwnProperty' no –

+3

El problema es cuando 'prop' tiene un valor falso. 'if (obj.hasOwnProperty ('prop'))' será 'true', mientras que' if (obj.prop) 'será' false'. –

1

hasOwnProperty es una función normal de Javascript que toma un argumento de cadena.

En su caso somevar.hasOwnProperty ('someProperty') que compruebe el funcionamiento somevar tiene somepropery o no ,, lo devolverá verdadero y falso

Say

function somevar() { 
    this.someProperty= "Generic"; 
    } 

function welcomeMessage() 
{ 
    var somevar1= new somevar(); 
     if(somevar1.hasOwnProperty("name")) 
{ 
alert(somevar1.hasOwnProperty("name"));// it will return true 
} 
} 
1

Se utiliza Object.hasOwnProperty (p) para determinar si el objeto tiene una propiedad enumerablesp -

objeto puede tener su propio prototipo, donde los métodos y atributos "predeterminados" se asignan a cada instancia de objeto. hasOwnProperty devuelve verdadero solo para las propiedades que se establecieron específicamente en el constructor o se agregaron a la instancia más tarde.

para determinar si p se define en absoluto, en cualquier lugar, para el objeto, utilice si (p objeto instanceof), donde p se evalúa como una cadena propiedad nombre.

Por ejemplo, de forma predeterminada, todos los objetos tienen un método 'toString', pero no aparecerá en hasOwnProperty.

0

También escribí este simple object-hasOwnProperty componente reutilizable que devuelve un booleano para comprobar si el objeto tiene una propiedad especificada. Tiene 2 ejemplos y 3 pruebas que pueden ayudar a comprender mejor el comportamiento real de los casos de uso.

Ejemplos:

hasOwnProperty({foo: 'bar'}, 'foo') // => true 
hasOwnProperty({foo: 'bar'}, 'bar') // => false 

casos de uso probados:

hasOwnProperty() should return false as given object do not contain key `bar` 
hasOwnProperty() should return true as given object contains key `foo` 
hasOwnProperty() should return false if key is null 

Aquí es como funciona:

function hasOwnProperty(obj: {}, prop: string|number): boolean { 
    return Object.prototype.hasOwnProperty.call(obj, prop); 
}; 
3

Aquí está la respuesta corta y precisa:

en JavaScript , cada objeto tiene un moño ch de pares clave-valor incorporados que tienen metainformación sobre el objeto. Cuando recorre todos los pares clave-valor usando for...in construir/bucle para un objeto, también está recorriendo estos pares clave-valor de metainformación (que definitivamente no quiere).

enter image description here

Usando hasOwnPropery(property)filtros-Out estos innecesario bucle a través de los meta-informaciones y directamente comprueba que es el parámetro de property es propiedad dada de usuario en el objeto o no. Por filtra-fuera, quiero decir, que hasOwnProperty(property) no se ve si, property existe en la cadena de prototipos del objeto aka meta-información.

Devuelve booleano true/false basado en eso.

Aquí se muestra un ejemplo:

var fruitObject = {"name": "Apple", "shape": "round", "taste": "sweet"}; 
 
console.log(fruitObject.hasOwnProperty("name")); //true 
 
console.log(Object.prototype.hasOwnProperty("toString");) //true because in above snapshot you can see, that there is a function toString in meta-information

espero que sea claro!

Cuestiones relacionadas