微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 console.log 打印后未定义数组元素?似乎只有在删除该行后才定义..? Javascript

如何解决使用 console.log 打印后未定义数组元素?似乎只有在删除该行后才定义..? Javascript

我想在下面的数组中返回真实值的数量

const array = [1,2,3,'',2];

function countTruthy (array) {


let numberCount = 0;

for (let item of array) 

    console.log(item)

    if (item) numberCount++;

    return numberCount;

但这只有在我删除这一行后才有效。

console.log(item)

否则我会得到:Uncaught ReferenceError: item is not defined 在countTruthy?

为什么?

额外问题 - 无论我的 return 语句如何缩进,我都会得到相同的结果......但它应该在“if 语句”还是“for 循环”下?为什么?

解决方法

您似乎缺少一些作用域(即“{}”)。对于您当前的实现,for 语句只会执行 console.log 这就是为什么如果您删除它然后它会执行 if(item)... 并且一切正常

试试

for (let item of array) {
  console.log(item);
  if (item) {
    numberCount++;
  }
}
return numberCount;

需要注意的一件重要事情是 Javascript 不是一种“位置”语言,因此无论您如何缩进代码,它都会执行相同的代码,重要的是括号。

,

这似乎是一个缩进问题。使用方括号关闭函数和 for 循环,如下所示:

const array = [1,2,3,'',2];

function countTruthy (array) {

  let numberCount = 0;

  for (let item of array) {
    console.log(item)

    if (item) numberCount++;

  }
  return numberCount;
}
,

希望对你有用:

当您在“for”、任何循环或条件中不使用大括号“{}”时,该过程仅采用下一行。在您的情况下,如果您删除日志,该项目由“for”识别,但如果您在下一行添加日志,因为它没有键“{}”,“for”仅与下一行,该项目不再属于“for”,因此不再被识别,您必须在“for”之外声明它

const array = [1,2];

function countTruthy (array) {

  let numberCount = 0;

    for (let item of array) 
    {
      console.log(item);
      if (item) numberCount++;
    }
    return numberCount;
}

countTruthy(array);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。