使用&&和/或在javascript for循环中使用布尔值的运算符?

时间:2014-08-06 19:57:49

标签: javascript jquery

这是mixItUp jQuery plugin中的代码段(链接中的完整代码供参考)。在for循环中有一个可能被评估为false的语句有什么意义?这是否意味着你突破了循环?我特别想知道这一行:(group.tracker === false)&& DONE ++;

concatenate: function(){
var self = this,
      cache = '',
      crawled = false,
      checkTrackers = function(){
    var done = 0;

    for(var i = 0, group; group = self.groups[i]; i++){
      (group.tracker === false) && done++;
    }

    return (done < self.groups.length);
  },

2 个答案:

答案 0 :(得分:7)

这是一种简洁的写作方式

if (group.tracker === false)
    done++;

该陈述不会影响围绕它的循环的机制。

使用这种编码风格并没有什么好处;两种方式都没有任何有意义的性能差异。这只是一种偏好。

答案 1 :(得分:4)

这行代码使用的是延迟评估

JavaScript就像这段代码一样在这里工作:

if (group.tracker === false)
    done++;

这是如何工作的:让我们把这一行想象成逻辑表达式。

我们检查第一部分:(group.tracker === false)。如果结果为false,那么我们知道,整个表达式将导致false(因为&&运算符)。所以我们不必运行第二部分代码。

但是,如果它是true而不是我们需要运行第二段代码,那么检查它是否也是true

这就是它基本上如何运作