Test Foro de elhacker.net SMF 2.1

Programación => Desarrollo Web => Mensaje iniciado por: dimitrix en 29 Julio 2015, 02:49 AM

Título: Comprobar objetos en JS
Publicado por: dimitrix en 29 Julio 2015, 02:49 AM
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ítulo: Re: Comprobar objetos en JS
Publicado por: T. Collins en 29 Julio 2015, 03:30 AM
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 (https://developer.mozilla.org/en-US/docs/Web/javascript/Reference/Statements/for...in)
Título: Re: Comprobar objetos en JS
Publicado por: 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

tambien puedes recurrir a

Código (javascript) [Seleccionar]
var txt = "Nombre: " + obj.nombre + ' ' + obj.apellidos != undefined ? obj.apellidos : '' + ' ' + obj.apellidos
Título: Re: Comprobar objetos en JS
Publicado por: MinusFour en 29 Julio 2015, 04:39 AM
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.
Título: Re: Comprobar objetos en JS
Publicado por: eLank0 en 29 Julio 2015, 09:59 AM
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!