【问题标题】:Getting 'undefined', can't figure out why得到“未定义”,不知道为什么
【发布时间】:2015-12-03 20:10:14
【问题描述】:

通过“Eloquent Javascript”工作,我在理解如何在语言中正确使用 iffor 语句方面遇到了一些障碍。我应该编写一个函数来计算给定字符串中大写“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"));

预期输出2

实际输出undefined

是我的循环出错了,还是我的“如果”出错了?

【问题讨论】:

  • 你没有返回counter
  • 就是这样:if (s.charAt(i) == 'B')
  • 返回计数器,你没有从函数返回任何东西
  • 这也是错误的:if ('B' == s.charAt(i)) { }counter += 1;

标签: javascript


【解决方案1】:

你有两个错误

  1. 您在 if 语句之外增加了 counter
  2. 您没有return 声明。

可以使用以下内容:

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;
}

【讨论】:

    【解决方案2】:

    您的函数没有return 语句。

    【讨论】:

    • 哇哦。不敢相信我错过了。感谢您的快速回复!
    【解决方案3】:

    一些问题。

    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. 即使您返回counter 并修复了上述2 个错误,在找到1 个B 后函数仍然会退出。要解决此问题,请在 for 结束后移动 return

    如果你有兴趣,同样的问题可以用这个单线解决:

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

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

    【讨论】:

    • 原来没有return语句,为什么会提前退出?
    • @TbWill4321 如果他按照之前的一些回复和 cmets 添加return,它仍然会在for 中执行。看起来为了清楚起见,原始问题已经过编辑,所以我的第三点失去了一点意义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-27
    • 2016-01-28
    • 1970-01-01
    • 2019-11-12
    • 1970-01-01
    相关资源
    最近更新 更多