javascript - 速记 "index >= 0 && count++"有什么作用?

标签 javascript shorthand

我正在消磨时间阅读 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/

相关文章:

javascript - 我怎样才能获得多种模式?

javascript - !0 和 !1 不仅仅是 true/false 的简写吗?

几个类的 CSS Hover 相同

javascript - 构造函数使用 ES6 速记符号表现不同

javascript - 使用 interact.js 拖放

javascript - 在 json 中存储函数 [Javascript/Coffeescript]

html - 简写边框!

javascript - 在两个方向上迭代一个范围

javascript - 如何从 <li> 标签获取值

javascript - 在 JS 调用上执行 PHP 的可靠方法?