2012-05-01 5 views
5

W poniższym kodzieDlaczego nie ma w tym oświadczenie porównanie javascript 'if ... else ...' oświadczenie

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

część '$ active.next(). Length' nie wydaje cokolwiek porównać i nie rozumiem, w jaki sposób warunek jest określony jako prawdziwy lub fałszywy.

A może jest tak: jeśli różne $ next jest równe $ active.next(). Length to warunek jest prawdziwy?

+0

może chcesz przeczytać: http://stackoverflow.com/questions/6766044/understanding-javascript-hoisting-and-truthy-falsy –

+0

funkier (i krótsze i mniej wywołania funkcji) to sposobem będzie var $ next = $ ($ active.next() [0] || '#slideshow img: first'); – GillesC

Odpowiedz

9

W javascript każde wyrażenie może zostać przekonwertowane do wartości truey lub falsy, a zatem jest ważne w porównywaniu. Wartości, które są fałszywe w JavaScript są

  • false
  • 0
  • "" (pusty ciąg znaków)
  • null
  • undefined
  • NaN

W tym przypadku length odnosi się do wartości liczbowej, a jeśli oceni na 0, wówczas zostanie uznane za falsy. W przeciwnym razie będzie to prawda:

5

Jeśli właściwość length wynosi 0 lub undefined (tj $active nie jest tablica), warunek ten zostanie false.

2

Jeśli $active.next().length jest , co oznacza, że ​​istnieje kolejny element, to $next = $active.next(). W przeciwnym razie $next = $('#slideshow IMG:first'). Operator ? nazywany jest operatorem potrójnym. Jest krótki if else.

1

To potrójny porównanie równoważne:

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

więc warunek jest na podstawie $ active.next() długości, która powinna zwracać wartość zero lub więcej.. Wszystko, co jest większe niż zero, JavaScript będzie interpretować jako true, zero false.

0

To, na co patrzysz, to Ternary opertation, która jest krótka dla If If ... Else ... wspomniałeś w tytule.

Więc długa wersja twojego oświadczenia jest;

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