2012-07-20 16 views
6

Estoy tratando de usar un operador ternario para verificar si el valor de un elemento XML es nulo. Si es así, entonces quiero que la variable sea una cosa. Si no, me gustaría que devuelva el valor del elemento. Esto es lo que tengo hasta ahora.Usando un operador ternario para establecer una variable

var rating = data.getElementsByTagName("overall_average")[0].childeNodes[0].length > 0 ? data.getElementsByTagName("overall_average")[0].childeNodes[0].nodeValue : "It is empty"; 

Respuesta

5

El camino más corto:

var rating = (data.getElementsByTagName('overall_average')[0].childNodes[0] || {}).nodeValue || 'It is empty'; 
+0

Por favor, explique? – mplungjan

+0

@mplungjan, utilicé el operador '||' para comprobar nulo en mi ejemplo. Entonces, si tienes algo como esto: 'var x = null || {}; 'entonces x será un' objeto' vacío en vez de 'nulo'. También puede usar '||' para las propiedades: 'var x = {} .someProp || 'hola'; ', x será '' hola ''. –

+0

¡Gracias! ¿Sería capaz de explicar cómo verificaría si esta misma variable es un número en un operador ternario? –

11

aquí:

var node = data.getElementsByTagName('overall_average')[0].childNodes[0]; 
var rating = node ? node.nodeValue : 'It is empty'; 

Tenga en cuenta que este código lanza (un error) en caso de que no hay un solo elemento "overall_average" en data, así que sería bueno para protegerse contra ese caso, si es necesario ...

+0

Se continúa lanzando NaN como el valor de la calificación. –

+0

No veo por qué haría eso. Estamos simplemente haciendo referencia a un nodo y accediendo a su 'nodeValue'. Recomiendo establecer un punto de ruptura y comprobar si 'node' es realmente una referencia de nodo ... –

+0

Gracias. Solo hice eso. Había un complemento que intentaba redondear la variable de calificación. Cambié mi código a una función anónima y eso fue lo que hizo. Sin embargo, para referencia futura, ¿sabe cómo verificar si una variable es un número y escupir algo en función del resultado? Preferiría de nuevo estar en un operador ternario. –

1

Su operación ternaria se ve bien para mí. Una cosa que sugeriría (por legibilidad y brevedad) es definir su objeto overall_average como una variable y consultarlo después.

var overall_average = data.getElementsByTagName("overall_average")[0].childeNodes[0]; 
var rating = overall_average.length > 0 ? overall_average.nodeValue : "It is empty"; 

¡Buena suerte!

+0

Gracias. Esto tiene sentido, pero siento que estoy ejecutando una lista de elementos, esto sería dos líneas por variable que estoy tratando de establecer. –

Cuestiones relacionadas