如何基于变量键名获取对象及子对象?咨询正确实现方式
嘿,这两个问题都是日常写JavaScript时经常碰到的场景,我来给你拆解清楚,结合你提到的之前失败的原因一起说~
1. 基于变量键名获取对象属性
在JS里,访问对象属性有两种方式:点号.和方括号[],但如果你的键名是变量,只能用方括号语法——点号只能识别字面量的键名,没法解析变量的值。
举个直观的例子:
const product = { name: "无线耳机", price: 299 }; const targetKey = "price"; // ✅ 正确:用方括号解析变量的值 console.log(product[targetKey]); // 输出 299 // ❌ 错误:点号会把targetKey当成字面量键,而不是变量 console.log(product.targetKey); // 输出 undefined,因为product里没有叫"targetKey"的属性
2. 使用变量获取对象的子属性
针对嵌套的子属性,同样可以用方括号语法,分两种常见情况:
情况1:单个子属性的键名是变量
比如你的对象结构是这样(注意:你之前失败是因为没指定id子属性,所以首先要确保目标键存在于对象里):
const student = { info: { id: "S001", // 必须确保这个键存在,不然会返回undefined grade: "A" } }; const subKey = "id"; // ✅ 正确访问:先拿到外层的info对象,再用变量键名 console.log(student.info[subKey]); // 输出 "S001"
情况2:嵌套路径是变量(比如完整路径字符串)
如果你的变量是类似"info.id"这样的完整嵌套路径,可以写个小工具函数来解析:
// 解析嵌套路径的函数 const getNestedProperty = (obj, path) => { // 把路径拆成单个键名,然后逐层遍历对象 return path.split(".").reduce((currentObj, key) => { // 用可选链?.避免不存在的键抛出错误 return currentObj?.[key]; }, obj); }; const student = { info: { id: "S001" } }; const targetPath = "info.id"; console.log(getNestedProperty(student, targetPath)); // 输出 "S001"
额外注意点
你提到之前实现失败是因为对象未指定id子属性,这里要提醒:
- 首先确认你的对象结构中确实存在目标键,否则不管用哪种方式都会返回
undefined - 如果不确定键是否存在,建议用**可选链操作符
?.**来避免报错,比如student.info?.[subKey],这样即使info不存在也不会抛出错误
内容的提问来源于stack exchange,提问作者Ashraf Misran
相关产品推荐
相关产品推荐

