这是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);
},
答案 0 :(得分:7)
这是一种简洁的写作方式
if (group.tracker === false)
done++;
该陈述不会影响围绕它的循环的机制。
使用这种编码风格并没有什么好处;两种方式都没有任何有意义的性能差异。这只是一种偏好。
答案 1 :(得分:4)
这行代码使用的是延迟评估。
JavaScript就像这段代码一样在这里工作:
if (group.tracker === false)
done++;
这是如何工作的:让我们把这一行想象成逻辑表达式。
我们检查第一部分:(group.tracker === false)
。如果结果为false
,那么我们知道,整个表达式将导致false
(因为&&
运算符)。所以我们不必运行第二部分代码。
但是,如果它是true
而不是我们需要运行第二段代码,那么检查它是否也是true
。
这就是它基本上如何运作