
本文详解如何在 javascript 中通过变量名动态访问对象属性,并正确调用 filter 方法,避免因点号(.)语法导致的属性未定义错误。核心在于使用方括号([])属性访问器替代硬编码键名。
本文详解如何在 javascript 中通过变量名动态访问对象属性,并正确调用 filter 方法,避免因点号(.)语法导致的属性未定义错误。核心在于使用方括号([])属性访问器替代硬编码键名。
在 JavaScript 中,当需要根据变量值动态访问对象的某个属性(例如 json.test),而该属性名本身存储在一个变量中(如 const VARIABLE_NAME = 'test'),绝不能使用点号(.)语法,因为 json.VARIABLE_NAME 会被解释为字面量属性名 "VARIABLE_NAME",而非变量 VARIABLE_NAME 的运行时值。
✅ 正确做法是使用方括号表示法(bracket notation):
const VARIABLE_NAME = 'test'; // 注意:字符串字面量,非未声明标识符
const results = json[VARIABLE_NAME].filter((result) => {
return result.active === true;
});⚠️ 常见错误与注意事项:
- ❌ const VARIABLE_NAME = test; —— 若 test 未定义,将抛出 ReferenceError;应写作 const VARIABLE_NAME = 'test';(加引号);
- ❌ json.VARIABLE_NAME.filter(...) —— 等价于 json['VARIABLE_NAME'],而非 json['test'];
- ⚠️ 使用前务必校验属性是否存在,防止 Cannot read property 'filter' of undefined:
if (Array.isArray(json[VARIABLE_NAME])) { const results = json[VARIABLE_NAME].filter(/* ... */); } else { console.warn(`Expected array at json.${VARIABLE_NAME}, but got`, json[VARIABLE_NAME]); }
? 进阶提示:若需支持嵌套路径(如 'data.items'),可结合 lodash.get() 或自定义路径解析函数,但对单层动态键,obj[key] 是最简洁、原生、高性能的方案。
立即学习“Java免费学习笔记(深入)”;
总结:动态属性访问是 JavaScript 基础但易错的关键技能。牢记——变量驱动的属性名必须用 [],不可用 .;配合类型检查与防御性编程,即可安全、清晰地实现灵活的数据筛选逻辑。










