请帮助理解JS代码的一部分

时间:2015-02-27 20:48:29

标签: javascript indexof

我是编码和学习indexOf()方法的新手,我找到了这样的代码部分(见下文) 我想知道为什么我们在下面的代码中使用 if()部分。没有它,为什么它不起作用?

var myString = 'Welcome to Wrox books. ';
myString = myString + 'The Wrox website is www.wrox.com. ';
myString = myString + 'Visit the Wrox website today. Thanks for buying Wrox';
var foundAtPosition = 0;
var wroxCount = 0;
while (foundAtPosition != -1)
{
foundAtPosition = myString.indexOf('Wrox',foundAtPosition);
if (foundAtPosition != -1)
{
wroxCount++;
foundAtPosition++;
}
}
document.write('There are ' + wroxCount + ' occurrences of the word Wrox');

会感激任何想法。

3 个答案:

答案 0 :(得分:2)

您需要if来检查您是否找到了您要查找的字符串。  如果找不到字符串,indexOf()将返回-1

答案 1 :(得分:0)

每次找到它时,你都在计算wrox的位置。如果您没有更多的资源,则不会增加计数器wroxCount,因为我们不希望计数器在foundAtPosition变为-1后计数。或换句话说,在最后一次发生之后,或者根本找不到wrox

答案 2 :(得分:0)

indexOf()方法接受两个参数:要在给定字符串中查找的子字符串,以及应该开始搜索子字符串的位置(索引)。它返回第一次出现的子串的位置(索引)(如果提供了第二个参数,它将是提供的位置之后的第一个参数)。

那么,循环中的代码是什么:

  1. 使用indexOf()方法查找第一次出现的子字符串的位置,并将位置保存在变量foundAtPosition中。
  2. 如果找到子字符串(foundAtPosition!=-1),则wroxCount变量会递增以指示到目前为止找到的子字符串数,并且foundAtPosition变量也会递增(读取时)关于它)。
  3. while循环检查条件,如果满足则再次执行其内容。
  4. 循环找到第一次出现的子字符串的位置,但现在它开始在foundAtPosition处搜索。当foundAtPosition变量加1时,它将在先前发现的事件之后开始搜索,并将返回下一个变量的位置。
  5. 这种情况一直持续到没有剩余事件发生,这使得wroxCount变量包含主字符串中子字符串出现次数。
  6. 结果:您获得了您要查找的单词(子字符串)出现在字符串myString中的次数。