6

在下面的代码中

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

'$active.next().length' 部分似乎没有比较任何东西,我不明白条件是如何确定为真或假的。

还是说:如果各种 $next 等于 $active.next().length 那么条件为真?

4

5 回答 5

11

在 javascript 中,任何表达式都可以转换为真值或假值,因此在比较位置有效。javascript中为假的值是

  • false
  • 0
  • ""(空字符串)
  • null
  • undefined
  • NaN

在这种情况下length,指的是一个数值,如果它的计算结果为,0那么它将被认为是虚假的。否则会是真的

于 2012-05-01T17:04:04.740 回答
5

如果length属性等于0undefined(即$active不是数组),则条件为false

于 2012-05-01T17:03:54.507 回答
2

如果$active.next().lengthtrue,表示有下一个元素,那么$next = $active.next()。否则$next = $('#slideshow IMG:first')。该?运算符称为三元运算符。它是一个简短的if else.

于 2012-05-01T17:04:27.020 回答
1

这是一个三元比较,相当于:

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

所以条件基于 $active.next().length 应该返回一个零或更大的值。任何大于零的东西,JavaScript 都会解释为真,零为假。

于 2012-05-01T17:05:17.067 回答
0

您正在查看的三元运算是 If...Else... 的缩写,您在标题中提到过吗?

所以你的陈述的长版本是;

if($active.next().length){
 $next = $active.next();
}else {
 $next = $('#slideshow IMG:first');
}
于 2012-05-01T17:07:06.560 回答