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?。
我在使用 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?。