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
相关产品推荐
相关产品推荐

