此问题已在此处找到答案:
循环。为什么小于<不小于或等于<=((四个答案)
昨天关门了。
我有一个名为posts的数组,它包含一个对象:
var posts = []
app.get('/', function(req, res) {
res.render('home', {
homestct: homeStartingContent,
posts: posts
})
})
app.post('/compose', function(req, res) {
const comp = {
title: req.body.compTitle,
post: req.body.compPost
}
posts.push(comp)
res.redirect('/')
})
当我试图在home.ejs中检索关键字:title时=
<% for (var i = 0; i <= posts.length; i++) { %>
<% console.log(posts[i].title) %>
<% } %>
它给了我一个错误:无法读取未定义的属性“title”
请帮忙
2条答案
按热度按时间ajsxfq5m1#
fslejnso2#
你的错误是你有
<=
而不是<
. 让我举例说明原因。假设您的posts数组如下所示:
你有两个帖子,所以
posts.length
将2
. 第一个帖子是posts[0]
,第二个帖子是posts[1]
.既然你这么做了
for (var i = 0; i <= posts.length; i++)
,这意味着您的循环只有在i <= posts.length
不再是真的,意思是如果i <= 2
不再是真的,即当i
达到3
,循环将停止,但将针对0
,1
及2
.您可能会注意到,现在这意味着可以访问三个索引(
0
,1
及2
)尽管数组中只有两个帖子(带索引0
及1
)!在第三次迭代中,您将访问
posts[2]
那是undefined
. 这意味着尝试读取posts[2].title
失败,因为它实际上尝试读取undefined.title
这是不可能的,因此出现了错误Cannot read property 'title' of undefined
.底线:当你有一个从零开始的索引(从
0
)您可以将元素的总数作为限制器(从.length
例如),您始终需要使用<
而不是<=
确保停止长度不足的一个索引,因为最后一个索引将始终为length - 1
.建议:您可以使用
for ... of
: