JS访问数据库返回对象属性报Cannot read 'settings' of undefined求助
问题根因
你代码的逻辑顺序出错了:base参数的存在性校验时机晚于base属性的访问时机。
- 你在第一行
const language = base.data.settings.language就直接访问了base的深层嵌套属性,没有做任何存在性校验。当调用translate方法时如果没有传入base参数、或者base为undefined/null,这行代码会直接抛出cannot read property 'data' of undefined的错误,根本不会执行到后面三元运算符里的base判断逻辑。 - 你测试时刚好
base有值,所以console.log能正常打印en-US,但实际运行场景中一定存在base为空的情况,就会触发报错。 - 硬编码
language为字符串时,不需要访问base的属性,哪怕base为空,后面的三元运算符会直接返回en-GB,自然不会报错。
修复方案
把base的存在性校验提前到读取language的阶段即可,推荐用ES2020的可选链+空值合并运算符写法规避深层属性访问的报错:
translate(key, args, base) { // 任意层级属性为空时,默认返回en-GB const language = base?.data?.settings?.language ?? 'en-GB' const result = this.translation.get(language) // 其余原有逻辑 return result; }
如果你的运行环境不支持新语法,可以用传统的逻辑与判断兼容:
translate(key, args, base) { const language = base && base.data && base.data.settings && base.data.settings.language || 'en-GB' const result = this.translation.get(language) // 其余原有逻辑 return result; }
内容的提问来源于stack exchange,提问作者m ihsan
相关产品推荐
相关产品推荐

