gpt4 book ai didi

javascript - 为什么我在 Node.js 中使用 for in 循环迭代时得到函数

转载 作者:太空宇宙 更新时间:2023-11-04 00:30:55 27 4
gpt4 key购买 nike

我正在使用 for in 循环迭代一个对象数组,我得到了其中的所有对象,但我也得到了一个函数,我想知道如何得到它。我的迭代代码如下所示:

 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循环访问对象及其原型(prototype)上的所有可枚举属性,包括那些引用函数的属性。显然,有人向引用函数的 student 数组(或 Array.prototype)添加了一个可枚举属性。

如果您希望它不显示,请通过 Object.defineProperty 使属性不可枚举,或者如果它位于对象的原型(prototype)链上而不是对象本身,并且您只需要对象的“自己”属性,请添加 hasOwnProperty 检查(或使用 Object.keys 获取属性名称数组)。

但是,如果 student 确实是一个数组,则 for-in 通常不是循环遍历其条目的工具;查看For-each over an array in JavaScript?的答案了解详情。

<小时/>

在您提出的评论中:

when i use nested forEach loop it suggest me dont use function inside loop what to do in that case sir?

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

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...
}
}

关于javascript - 为什么我在 Node.js 中使用 for in 循环迭代时得到函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40971557/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com