You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中EJS模板内检查对象未定义属性的方法

在EJS中安全检查嵌套属性的方法

这问题我太熟了!在EJS里处理嵌套属性时,只要中间某一层是undefined,直接访问下一层就会触发「Cannot read property...」的错误,你之前的代码就是因为没先检查user.pages是否存在才炸的。给你几个实用的解决办法:

1. 逐层短路检查(最稳妥,兼容所有EJS版本)

利用逻辑与&&的短路特性——如果前面的条件不成立,后面的代码就不会执行,这样就能避免访问不存在的属性:

<% if (user && user.pages && user.pages.pageVisits) { %>
  foo defined
<% } else { %>
  foo undefined
<% } %>

如果担心user本身都没被传入模板,也可以加上locals的检查:

<% if (locals.user && locals.user.pages && locals.user.pages.pageVisits) { %>
  foo defined
<% } else { %>
  foo undefined
<% } %>

2. 可选链操作符(简洁,需Node.js 14+支持)

如果你的Node.js版本在14及以上,可以用ES6+的可选链操作符?.,它会自动逐层检查属性是否存在,不存在就返回undefined,不会报错:

<% if (user?.pages?.pageVisits) { %>
  foo defined
<% } else { %>
  foo undefined
<% } %>

这个写法最简洁,推荐在环境允许的情况下使用。

为什么你之前的代码无效?

你之前直接写locals.user.pages.pageVisits,当locals.user.pages是undefined时,尝试访问它的pageVisits属性就会触发错误——因为你跳过了对pages是否存在的检查,必须确保每一层嵌套属性都存在后,才能访问下一层。

内容的提问来源于stack exchange,提问作者user1149620

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:03:22