对象为null时读取属性触发"无法读取属性"错误,该如何解决?
解决无法读取null/undefined对象属性的空值检查问题
你遇到的cannot read 'record' of null错误,本质是data本身为null或undefined,而非record属性为null——直接访问一个null/undefined值的属性会触发类型错误。以下是几种可行的解决方法:
方案1:分层短路检查
先判断data是否有效,再检查属性,利用逻辑或的短路特性避免后续报错:
var data = Template.currentData(); if (!data || !data.record) { // 这里处理空值对应的业务逻辑 }
如果data是null/undefined,!data为true,逻辑或会直接返回结果,不会执行后面的!data.record,自然不会报错。
方案2:使用可选链操作符(ES2020+)
这是更简洁的现代写法,?.操作符会在左侧值为null/undefined时直接返回undefined,不会抛出错误:
var data = Template.currentData(); if (!data?.record) { // 处理空值逻辑 }
方案3:提前给data兜底赋值
如果后续还要多次访问data的其他属性,可以先给data设置默认空对象,从根源避免属性访问报错:
var data = Template.currentData() || {}; // 若原data为null/undefined,就用空对象兜底 if (!data.record) { // 处理空值逻辑 }
精确区分空值场景(可选)
如果需要区分record是null/undefined还是空字符串"",可以做更精准的判断:
var data = Template.currentData(); if (!data || data.record == null || data.record === "") { // 当data无效,或record为null/undefined,或record是空字符串时触发 }
也可以结合可选链和空值合并操作符进一步简化:
if ((data?.record ?? "") === "") { // 效果同上 }
内容的提问来源于stack exchange,提问作者user20330985
相关产品推荐
相关产品推荐

