Comprobar objetos en JS

Iniciado por dimitrix, 29 Julio 2015, 02:49 AM

0 Miembros y 1 Visitante están viendo este tema.

dimitrix

Pues... a ver, tengo un objeto que en ocasiones tiene:

obj.nombre
obj.apellidos
obj.edad

Y en otras es sólo:

obj.nombre
obj.edad




Lo que me gustaría saber, es cual es el camino más rápido para hacer esto

txt = 'Nombre: '+obj.nombre+' '+obj.apellidos+' '+obj.edad

El problema de esto es que si no existe obj.apellidos el JS da error y se para, por lo que me gustaría saber cual es el camino más rápido para hacer estas cosas. Ya que poner un typeof creo que no lo sería.

PD: Esto es un ejemplo.




T. Collins

#1
Lo primero que se me ha ocurrido, igual hay mejores formas de hacerlo
Código (javascript) [Seleccionar]

var txt = "Nombre:";
for(x in obj){ txt += " "+obj[x]; }


Mírate esto: https://developer.mozilla.org/en-US/docs/Web/javascript/Reference/Statements/for...in

engel lex

correción al codigo de

Código (javascript) [Seleccionar]

for(x in obj){ txt += " "+x; }


pero puedes salir desorganizado

tambien puedes recurrir a

Código (javascript) [Seleccionar]
var txt = "Nombre: " + obj.nombre + ' ' + obj.apellidos != undefined ? obj.apellidos : '' + ' ' + obj.apellidos
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

MinusFour

Cita de: engel lex en 29 Julio 2015, 03:48 AM
correción al codigo de

Código (javascript) [Seleccionar]

for(x in obj){ txt += " "+x; }


pero puedes salir desorganizado

El codigo de T. Collins es correcto. x es el nombre de la propiedad así que eso simplemente concatena los nombres de las propiedades del objeto, no los valores de las propiedades. El problema es tal y como comentas, el orden no es seguro.

Si quieres comprobar que una variable este definida la comparas contra undefined:

Código (javascript) [Seleccionar]

if(obj.apellidos !== undefined) {
    //obj.apellidos está definido.
}


Si por ejemplo, estuviera anidado (obj.apellidos.primero por ejemplo), tienes que hacer chequeos en orden o te arriesgas a un TypeError:

Código (javascript) [Seleccionar]

if(obj.apellidos !== undefined && obj.apellidos.primero !== undefined) {
    //obj.apellidos y obj.apellidos.primero estan definidos.
}


Undefined tambien es un valor falsey, por lo que puedes escribir así:

Código (javascript) [Seleccionar]

if(obj.apellidos){
    //obj.apellidos existe.
}


El único problema es que hay otros valores que tambien son falsey (0, '', false, null, NaN). Si esos valores no pueden ser apellidos, entonces no tienes ningún problema.

eLank0

Lo más fácil es:

txt = 'Nombre: '+ (obj.nombre || '') +' '+ (obj.apellidos || '') + ''+ (obj.edad || '')

En este caso en caso de ser undefined no pondrá nada.

Salu2!