如何将数组表示法改为对象表示法访问JS对象allTargetsData的amount值
正确用对象表示法访问动态属性的方法
嘿,我来帮你理清这个问题!你遇到的核心问题是动态属性名和固定属性名的访问方式区别——点表示法只能用在固定的属性名上,而当属性名是变量(比如requestYear、showrooms[i]、requestMonth这种)时,必须用方括号表示法,不能直接混着点用。
先拆解你的错误写法问题:
.requestYear这里是把requestYear当成了字符串字面量的属性名,而不是你定义的变量,JS会去寻找名为"requestYear"的固定属性,而不是变量里存储的年份值。requestYear.和.[showrooms[i]]里多出来的点是语法错误,直接会导致代码报错。
正确的写法
结合你的层级结构Year→showroom→month→amount,正确的访问方式应该是这样的:
// 因为requestYear、showrooms[i]、requestMonth都是变量,所以用方括号 var monthTargetData = JSON.stringify(allTargetsData.originalTarget[requestYear][showrooms[i]][requestMonth].amount);
如果你想在最后一步用点表示法(因为amount是固定属性名),上面的写法已经做到了——最后.amount就是点表示法,完全没问题。
再明确下两种表示法的适用场景:
- 点表示法:只能用于固定的、符合JS标识符规则的属性名(比如没有空格、不是关键字、以字母/下划线开头),比如
obj.name、obj.amount。 - 方括号表示法:适用所有场景,尤其是属性名是变量、带特殊字符(比如
obj["my property"])或者动态生成的时候,比如你这里的年份、展厅、月份都是变量,必须用方括号。
这样修改后,就能正确访问到amount的值啦!
内容的提问来源于stack exchange,提问作者hello world
相关产品推荐
相关产品推荐

