vacio saber recorrer propiedades objetos objeto new esta crear array agregar javascript object

recorrer - saber si un objeto esta vacio javascript



Cómo determinar si un objeto tiene una propiedad dada en JavaScript (8)

¿Cómo puedo determinar si un objeto x tiene una propiedad definida y , independientemente del valor de xy ?

Actualmente estoy usando

if (typeof(x.y) !== ''undefined'')

Pero eso parece un poco torpe. ¿Hay alguna manera mejor?


El objeto tiene propiedad:

Si está probando las propiedades que están en el objeto en sí (no es parte de su cadena de prototipo) puede usar .hasOwnProperty() :

if (x.hasOwnProperty(''y'')) { // ...... }

Objeto o su prototipo tiene una propiedad:

Puede usar el operador in para probar las propiedades que también se heredan.

if (''y'' in x) { // ...... }


¿Por qué no simplemente?

if (typeof myObject.myProperty == "undefined") alert("myProperty is not defined!");

O si esperas un tipo específico:

if (typeof myObject.myProperty != "string") alert("myProperty has wrong type or does not exist!");


Dado que la pregunta se refería a la confusión de la verificación de propiedades, y un caso de uso regular para la validación de los objetos de opciones de argumento de función, pensé que mencionaría una forma corta, sin bibliotecas, de probar la existencia de múltiples propiedades. Descargo de responsabilidad: requiere ECMAScript 5 (pero IMO, cualquiera que aún use IE8 merece una web rota).

function f(opts) { if(!["req1","req2"].every(opts.hasOwnProperty, opts)) { throw new Error("IllegalArgumentException"); } alert("ok"); } f({req1: 123}); // error f({req1: 123, req2: 456}); // ok


Donde quiero saber si un objeto llamado foo tiene una propiedad llamada barra, simplemente uso

if(foo.bar){ //do stuff }

Javascript devuelve false si la propiedad no existe. Hay casos donde esto es incorrecto sin embargo. Por ejemplo, si se espera que la barra sea un valor booleano o un número que puede ser igual a cero. Todo sin un valor es falso.

De lo contrario, me parece que es la solución más elegante.


Puedes recortar un poco así:

if ( x.y !== undefined ) ...


Si desea saber si el objeto contiene físicamente la propiedad, @gnarf''s respuesta de @gnarf''s utilizando hasOwnProperty hará el trabajo.

Si desea saber si la propiedad existe en algún lugar, ya sea en el objeto en sí o en la cadena del prototipo, puede usar el operador in .

if (''prop'' in obj) { // ... }

P.ej.:

var obj = {}; ''toString'' in obj == true; // inherited from Object.prototype obj.hasOwnProperty(''toString'') == false; // doesn''t contains it physically


Una característica de mi código original

if ( typeof(x.y) != ''undefined'' ) ...

lo que podría ser útil en algunas situaciones es que es seguro usar si x existe o no. Con cualquiera de los métodos en la respuesta de gnarf, primero se debe probar para x si hay alguna duda si existe.

Así que quizás los tres métodos tengan un lugar en la bolsa de trucos de uno.


Underscore.js o Lodash

if (_.has(x, "y")) ...

:)