无法读取数组的属性

在我的app.js中,我有以下几点:

post.find({'global': true}).sort('date').exec(function(err, data) { for (var i = 0; i <= data.length; i++) { console.log(data[i].email); //socket.emit('Post', {name: data[i].name, cont: data[i].cont, date: data[i].date}); } }); 

当我使用

 console.log(data[i]); 

我以我的forms得到我的数据

 {name: blah, cont: blah, email: blah, etc} 

但是,当我尝试发射数据

 data[i].attribute 

我得到错误

 TypeError: Cannot read property 'attribute' of undefined 

我知道数据在那里,因为我可以在控制台中logging它。 为什么我不能访问数组的特定属性? 有任何想法吗?

这可能是因为你如何使用你的循环。 你的<=逻辑会导致循环运行一个额外的时间,因此访问一个不存在的数组值。 这是发生了什么情况:

 var data = [{ foo: 'bar1' }, { foo: 'bar2' }]; for (var i = 0; i <= data.length; i++) { console.log(data[i].foo); } 

循环将运行三次而不是两次,导致这种情况发生:

 console.log(data[0].foo); // bar1 console.log(data[1].foo); // bar2 console.log(data[2].foo); // TypeError: Cannot read property 'foo' of undefined 

为了解决这个问题,把你的循环改成for (var i = 0; i < data.length; i++)

另外,还有一个debugging提示:即使data是一个长度为一千的数组,也应该在检查类似于你的错误时尝试使用输出,错误仍然只会在最后一次迭代中抛出,并用socket.emit()会出现好像循环只运行一次。