为什么这个JavaScript的“If...Else…”语句中没有比较语句

6
在以下代码中:
var $next =  $active.next().length ? $active.next()
        : $('#slideshow IMG:first');

代码中的 '$active.next().length' 部分似乎没有比较任何东西,我不明白条件是如何判断为True或False的。

或者它是在说: 如果各个$next等于$active.next().length,则条件为真?


你可能想阅读这篇文章:https://dev59.com/AlnUa4cB1Zd3GeqPaXBo - Martin Jespersen
一种更酷炫(更短,调用的函数更少)的方法是:var $next = $($active.next()[0] || '#slideshow img:first'); - GillesC
5个回答

11

在javascript中,任何表达式都可以转换为真值或假值,并且在比较的地方是有效的。在javascript中,假值对应以下几个值:

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

在这种情况下,length指的是一个数字值,如果它的值为0,那么它将被视为假值。否则它将被视为真值。


5

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


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

1

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

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

所以条件是基于 $active.next().length,它应该返回零或更大的值。任何大于零的值,JavaScript 都会解释为 true,零则为 false。


0
你现在看到的是一个 三元操作符,它是 if...else... 的简写,就像你标题中提到的那样。
因此,你这个语句的长版本应该是:
if($active.next().length){
 $next = $active.next();
}else {
 $next = $('#slideshow IMG:first');
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接