得到未定义的',无法弄清楚原因

时间:2015-12-03 20:10:14

标签: javascript

通过' Eloquent Javascript'我在理解如何在语言中正确使用if for语句时遇到了一些障碍。我应该编写一个函数来计算大写的所有实例' B'在给定的字符串中。我到目前为止编写的代码:



function countBs(s) {
  var counter = 0;
  for (i = 0; i < s.length; i++) {
    if ('B' == s.charAt(i)) {}
    counter += 1;
  }
}

console.log(countBs("BBC"));
&#13;
&#13;
&#13;

预期输出2

实际输出undefined

我的循环是错误的,还是我的&#39; if&#39;?

3 个答案:

答案 0 :(得分:3)

你有两个错误

  1. 您正在if语句之外增加counter
  2. 您没有return声明。
  3. 可以使用以下内容:

    function countBs(s){
      var counter = 0;
    
      for(i = 0; i < s.length; i++){
        if ('B' == s.charAt(i)) {
          counter += 1; // this needs to be inside the if statement
        }
      }
    
      return counter;
    }
    

答案 1 :(得分:2)

您的函数没有return声明。

答案 2 :(得分:1)

一些问题。

function countBs(s) {
  var counter = 0;
  for (i = 0; i < s.length; i++) {
    if ('B' == s.charAt(i)) {
      ++counter;
    }
  }
  return counter;
}

document.write(countBs("BBC"));

  1. 您未在功能结束时返回counter
  2. 您的if语句已打开,然后立即关闭,如果该字符为B
  3. 则没有任何反应
  4. 即使您返回counter并修正了上述2个错误,该函数仍会在找到B后退出。要解决此问题,请在return结束后移动for
  5. 如果您感兴趣,可以用这个单行解决同样的问题:

    function countBs(s) {
      return s.match(/B/g).length;
    }
    
    document.write(countBs("BBC"));

    找到所有B个字符(区分大小写),将它们放入数组中,然后返回该数组中的项目数。