EJS模板for循环用数字作为终止条件报错:无法读取undefined的icon_url属性
解决EJS循环中"Cannot read property 'icon_url' of undefined"的问题
这个报错的原因很明确——你的users数组里的元素数量不足40条!当循环执行到i的值超过users数组的实际长度时,users[i]就变成了undefined,这时候再去访问它的icon_url属性,自然就会抛出这个错误。
给你两个层面的修复方案,结合起来用最稳妥:
1. 限制循环上限,避免越界
不要硬写死循环40次,而是取users数组长度和40中较小的那个值作为循环的终止条件,这样既保证最多显示40条,又不会去访问数组里不存在的元素。
2. 增加空值判断,双重保险
即使数组里存在null或者空对象的元素,提前判断也能避免报错。
修改后的完整代码如下:
<% // 计算实际要循环的最大条数:取数组长度和40的最小值 %> <% const maxDisplayCount = Math.min(users.length, 40); %> <% for(var i=0; i<maxDisplayCount; i++) { %> <% const currentUser = users[i]; %> <% // 先判断currentUser是否存在,再判断icon_url是否有效 %> <% if (currentUser && currentUser.icon_url) { %> <a href="<%= currentUser.app_download_link %>"> <img title="<%= currentUser.title %>" class="photo" src="<%= currentUser.icon_url %>"> </a> <% } %> <% } %>
这样修改后,不管你的users数组是只有20条还是有50条,都能正常渲染前40条(或者全部现有元素),而且不会再出现那个属性读取错误。
内容的提问来源于stack exchange,提问作者rogerogden
相关产品推荐
相关产品推荐

