我正在消磨时间阅读 underscore.string函数,当我发现这个奇怪的速记时:
function count (str, substr) {
var count = 0, index;
for (var i = 0; i < str.length;) {
index = str.indexOf(substr, i);
index >= 0 && count++; //what is this line doing?
i = i + (index >= 0 ? index : 0) + substr.length;
}
return count;
}
法务:在使用上述功能之前要三思而不会归功于 underscore.string
我把这条线单独放在这里,所以你不会浪费时间去寻找它:
index >= 0 && count++;
我从未见过类似的东西。我对正在做什么一无所知。
最佳答案
index >= 0 && count++;
第一部分:
index >= 0
如果
index
返回真具有大于或等于 0
的值.第二部分:
a && b
大多数 C 风格的语言都是 bool 值的快捷方式
||
和 &&
运营商。对于
||
操作,你只需要知道第一个操作数是true
整个操作将返回 true
.对于
&&
操作,你只需要知道第一个操作数是false
整个操作将返回 false
.第三部分:
count++
count++
相当于 count += 1
相当于 count = count + 1
现在都在一起了
如果该行的第一个操作数 (
index >= 0
) 计算为 true
,第二个操作数 ( count++
) 将计算,所以它相当于:if (index >= 0) {
count = count + 1;
}
JavaScript 的细微差别
JavaScript 与其他 C 风格语言的不同之处在于它有
truthy
的概念。和 falsey
值。如果一个值计算为 false
, 0
, NaN
, ""
, null
, 或 undefined
,是falsey
;所有其他值都是 truthy
.||
和 &&
JavaScript 中的运算符不返回 bool 值,它们返回最后执行的操作数。2 || 1
将返回 2
因为第一个操作数返回了 truthy
值(value),true
或其他任何东西都将始终返回 true,因此不需要执行更多操作。或者,null && 100
将返回 null
因为第一个操作数返回了 falsey
值(value)。
关于javascript - 速记 "index >= 0 && count++"有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9319915/