2012-05-01 15 views
5

En el siguiente códigoPor qué no hay declaración de comparación en este 'If ... Else ...' declaración Javascript

var $next = $active.next().length ? $active.next() 
     : $('#slideshow IMG:first'); 

la parte '$ active.next(). Longitud' no parece para comparar cualquier cosa y no entiendo cómo se determina que la condición es verdadera o falsa.

¿O está diciendo que: si los diversos $ siguiente es igual a $ active.next(). Length entonces la condición es verdadera?

+0

es posible que quieras leer esto: http://stackoverflow.com/questions/6766044/understanding-javascript-hoisting-and-truthy-falsy –

+0

Una manera más cobarde (y más corto y menos llamadas de función) de hacer esto sería var $ next = $ ($ active.next() [0] || '#slideshow img: first'); – GillesC

Respuesta

9

En javascript, cualquier expresión se puede convertir a un valor verdadero o falso y, por lo tanto, es válida en un lugar de comparación. Los valores que son falsa en javascript son

  • false
  • 0
  • "" (cadena vacía)
  • null
  • undefined
  • NaN

En este caso, length se refiere a un valor numérico y si se evalúa como 0, se considerará falso. De lo contrario, será verdad

5

Si la propiedad length es igual a 0 o undefined (es decir $active no es una matriz), la condición será false.

2

Si $active.next().length es , significa que hay un elemento siguiente, entonces $next = $active.next(). De lo contrario, $next = $('#slideshow IMG:first'). El operador ? se llama operador ternario. Es un corto if else.

1

Es una comparación ternario equivalente a:

if($active.next().length) { 
    $next = $active.next(); 
} 
else { 
    $next = $('#slideshow IMG:first'); 
} 

Así que la condición se basa en $ active.next() de longitud que debe devolver un valor de cero o mayor.. Cualquier cosa mayor que cero, JavaScript interpretará como verdadero, cero falso.

0

Lo que está buscando en un Ternary opertation que es una mano corta para ... Else ... ha mencionado en el título.

Así que la versión larga de su extracto es;

if($active.next().length){ 
$next = $active.next(); 
}else { 
$next = $('#slideshow IMG:first'); 
} 
Cuestiones relacionadas