JavaScript For-In循环中的变量未定义

时间:2017-02-14 00:54:49

标签: javascript object firebase firebase-realtime-database for-in-loop

在使用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的变量始终可用(或至少定义)在循环内。

2 个答案:

答案 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])
}