为什么我在 node.js 中用 for in 循环迭代时得到函数
why i get function while iterating with for in loop in node.js
我正在使用 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
循环访问对象及其原型上的 所有 可枚举属性,包括那些引用函数的属性。显然,有人在引用函数的 student
数组(或 Array.prototype
)中添加了一个可枚举的 属性。
如果您不希望它出现,请通过 Object.defineProperty
使 属性 不可枚举,或者如果它在对象的原型链上而不是对象本身并且您只想要对象的"own" 属性,添加 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...
}
}
我正在使用 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
循环访问对象及其原型上的 所有 可枚举属性,包括那些引用函数的属性。显然,有人在引用函数的 student
数组(或 Array.prototype
)中添加了一个可枚举的 属性。
如果您不希望它出现,请通过 Object.defineProperty
使 属性 不可枚举,或者如果它在对象的原型链上而不是对象本身并且您只想要对象的"own" 属性,添加 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...
}
}