2012-05-01 13 views
5

Nel codice seguentePerché non c'è alcuna dichiarazione confronto in questo javascript 'If ... Else ...' dichiarazione

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

la parte '$ active.next(). Length' Non sembra per confrontare qualsiasi cosa e non capisco come si determina la condizione di essere Vero o Falso.

O sta dicendo che: se il vari $ next è uguale a $ active.next(). Length allora la condizione è vera?

+0

si potrebbe desiderare di leggere questo: http://stackoverflow.com/questions/6766044/understanding-javascript-hoisting-and-truthy-falsy –

+0

Un modo più funky (e più breve e meno chiamate di funzione) di fare questo sarebbe var $ next = $ ($ active.next() [0] || '#slideshow img: first'); – GillesC

risposta

9

In javascript qualsiasi espressione può essere convertita in un valore di verità o di falsità e quindi è valida in un luogo di confronto. I valori che sono false in JavaScript sono

  • false
  • 0
  • "" (stringa vuota)
  • null
  • undefined
  • NaN

In questo caso, length si riferisce a un valore numerico e se viene valutato su 0, verrà considerato falso. Altrimenti sarà truthy

5

Se la proprietà length è uguale o 0undefined (cioè $active non è un array), la condizione sarà false.

2

Se $active.next().length è true, il che significa che v'è un elemento successivo, quindi $next = $active.next(). Altrimenti $next = $('#slideshow IMG:first'). L'operatore ? è chiamato operatore ternario. È un breve if else.

1

E 'un confronto ternario equivalente a:

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

Quindi la condizione si basa su $ active.next() di lunghezza che dovrebbe restituire un valore pari a zero o maggiore.. Qualunque cosa maggiore di zero, JavaScript interpreterà come vero, zero false.

0

Quello che stai guardando un Ternary opertation che è una mano corta per If ... Else ... hai citato nel titolo.

Quindi la versione lunga della tua affermazione è;

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