为什么在这个javascript'If ... Else ...'声明中没有比较声明

时间:2012-05-01 17:01:37

标签: javascript conditional-statements if-statement

在以下代码中

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

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

或者是说: 如果各种$ next等于$ active.next()。length那么条件是真的吗?

5 个答案:

答案 0 :(得分:10)

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

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

在这种情况下,length引用一个数值,如果它的计算结果为0,那么它将被视为假。否则它将是真实的

答案 1 :(得分:5)

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

答案 2 :(得分:2)

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

答案 3 :(得分:1)

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

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

因此条件基于$ active.next()。length,它应返回零或更大的值。任何大于零的东西,JavaScript都会解释为true,为零。

答案 4 :(得分:0)

你正在看Ternary opertation这是If ... Else的简写...你在标题中提到了吗?

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

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