无法读取数组的属性
在我的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()
会出现好像循环只运行一次。