You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript push元素到新数组输出undefined是什么原因

问题场景

实现从整数数组筛选偶数存入新数组的逻辑时,控制台依次输出2、4、6后额外输出了undefined,对应代码如下:

const arr = [1,2,3,4,5,6];
const newArr = [];

const loop = () => {
 for (var item of array) {
  if (item % 2 == 0) {
   console.log(item);
   newArr.push(item);
  }
 }
};

console.log(loop());     

实际运行输出顺序为:2、4、6、undefined

注:上述代码中for...of遍历的变量写为array属于书写笔误,直接运行原代码会抛出array is not defined的引用错误,能正常输出2、4、6说明实际运行时遍历的是已正确定义的arr变量,该笔误和最后输出undefined无关。

产生undefined的核心原因

最后输出的undefined和数组push操作没有任何关系,来源是JavaScript函数的默认返回规则:

  • JavaScript中,只要函数没有通过return关键字显式指定返回值,函数执行完毕后默认返回undefined。
  • 定义的loop函数只做了遍历、奇偶判断、打印偶数、往新数组push元素的操作,全程没有写return语句,本身执行后的返回值就是undefined。
  • 最后一行写的console.log(loop())会先执行loop函数:函数运行时内部的三个console.log依次打印2、4、6;loop执行完后会把自身的返回值(也就是undefined)传给外层的console.log,就打印出了最后那个undefined。
修复方式

两种改法选其一即可:

  • 去掉外层包裹loop调用的console.log,直接执行loop()即可。如果需要查看筛选结果,单独执行console.log(newArr)就能拿到存好的偶数数组。
  • 给loop函数添加显式返回值,在循环结束后加一行return newArr,此时console.log(loop())就会直接打印筛选完成的[2,4,6],不会再输出undefined。

内容的提问来源于stack exchange,提问作者Digvijay Singh Thakur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 23:03:23