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

Variable undefined inside JavaScript For-In loop

我在使用 for..in 构造遍历 JavaScript 对象时偶然发现了这个令人费解的错误。我有一组与此类似的虚拟数据:

{
  "12345678" : {
    ...
  },
  "12345679" : {
    ...
  },
  "12345680" : {
    ...
  }
}

也许这很重要,这个对象是使用响应的内置 .val() 方法从 Firebase 数据库中检索的。它是一个普通的js对象。

但是,当遍历对象时, 循环中声明的变量不知何故未定义。我已经删除了除循环之外的所有周围代码,但错误仍然存​​在:

for (key in data) {
 console.log(data[key]);
}
// Throws ReferenceError: key is not defined

真是百思不得其解。这怎么可能?我认为传递给 for..in 的变量在循环内始终可用(或至少已定义)。

您只是没有为 for..in 语句使用正确的语法。 您需要使用 var(或 let,如果您使用 ES6)定义 key 变量:以便在语句中使用它:

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

如我的评论所述,您可能需要定义 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?