在使用for..in
构造循环JavaScript对象时,我偶然发现了这个令人费解的错误。我有一组与此类似的虚拟数据:
{
"12345678" : {
...
},
"12345679" : {
...
},
"12345680" : {
...
}
}
可能很重要,使用响应的内置.val()
方法从Firebase数据库中检索此对象。它是一个常规的js对象。
但是,当遍历对象时,在for..in
循环中声明 的变量在某种程度上是未定义的。我删除了除循环之外的所有周围代码,但仍然出现错误:
for (key in data) {
console.log(data[key]);
}
// Throws ReferenceError: key is not defined
我真的很困惑。这怎么可能?我认为传递给for..in
的变量始终可用(或至少定义)在循环内。
答案 0 :(得分:2)
正如我的评论所述,您可能需要定义key
;否则,你(可能)定义一个全局变量,它可能正常工作也可能不正常。另外,为避免不相关的属性出现在循环中,请使用hasOwnProperty
:
for (var key in data) {
if (!data.hasOwnProperty(key)) {
continue;
}
console.log(data[key]);
}
有关详细信息,请参阅How do I loop through or enumerate a JavaScript object?。
答案 1 :(得分:0)
您只是没有使用for..in
语句的正确语法。
您需要使用key
定义var
变量(如果使用ES6,则为let
):为了在语句中使用它:
for(var key in data){
console.log(data[key])
}