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

Array element not defined after I print it with console.log?? Seems to be only defined after I remove that line..? (Javascript)

我想 return 下面数组中的真实值的数量。

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,3,'',2];

function countTruthy (array) {

  let numberCount = 0;

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

countTruthy(array);