为什么我得到函数,而在node.js循环迭代

我正在迭代循环使用的对象数组我得到它里面的所有对象,但我也得到一个函数,我想知道我是如何得到这个。 我的迭代代码如下所示:

for (var key in student) { console.log(student[key]); } 

我与对象相处的是

  function (value) { if (this.indexOf(value) !== -1) { this.splice(this.indexOf(value), 1); return true; } else { return false; } } 

即使我只是简单地使用,这也是抛出错误的问题

 console.log(student[key].length); 

任何意见,高度赞赏。

因为for-in循环访问对象及其原型的所有可枚举属性,包括那些引用函数的属性。 显然,有人已经添加了一个枚举属性到student数组(或Array.prototype )引用一个函数。

如果你不想让它显示出来,通过Object.defineProperty使属性不可枚举,或者如果它在对象的原型链上而不是对象本身,并且你只想要对象的“自己”属性,添加一个hasOwnProperty检查(或使用Object.keys来获取一组属性名称)。

但是,如果student真的是一个数组for-in通常是循环input的错误工具; 看到在JavaScript中的每个数组的答案 了解详情。


在你已经问过的评论中:

当我使用嵌套的forEach循环,它build议我不使用内循环function先生在那种情况下做什么?

这个警告并不总是重要的,有时(甚至经常)你可以忽略它。 但是如果你想避免在循环中创build函数,只需将函数移出循环。 例如,你可以把这个:

 function foo() { outer.forEach(function(outerEntry) { outerEntry.forEach(function(innerEntry) { // Use `innerEntry` here... }); }); } 

 function foo() { outer.forEach(handleOuter); function handleOuter(outerEntry) { outerEntry.forEach(handleInner); } function handleInner(innerEntry) { // Use `innerEntry` here... } }