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.
Lo primero que se me ha ocurrido, igual hay mejores formas de hacerlo
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)
correción al codigo de
for(x in obj){ txt += " "+x; }
pero puedes salir desorganizado
tambien puedes recurrir a
var txt = "Nombre: " + obj.nombre + ' ' + obj.apellidos != undefined ? obj.apellidos : '' + ' ' + obj.apellidos
Cita de: engel lex en 29 Julio 2015, 03:48 AM
correción al codigo de
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:
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:
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í:
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.
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!