如何访问数组中的属性?为何array[0].obj.accessible无法生效?
问题解答:数组对象属性访问问题
问题1:如何访问数组中的属性?
要访问数组里嵌套对象的属性,分两步操作就可以搞定:
- 第一步:通过数组索引定位到目标对象,比如你的代码里
array[0]就获取了数组中第一个(也是唯一一个)对象。 - 第二步:用两种语法访问对象属性:
- 点语法(
.):适合属性名是固定、符合标识符规则的场景,比如array[0].option1、array[0].TEST.accessible就是典型用法。 - 方括号语法(
[]):适合属性名是变量、包含特殊字符或者动态生成的场景,比如如果有个变量prop = 'option1',就可以用array[0][prop]来访问对应属性。
- 点语法(
问题2:为何无法通过array[0].obj.accessible访问数组属性?
核心原因是你混淆了字面量属性名和变量属性名的访问规则:
在updateArray函数里,obj是一个参数(比如调用时可能传入'TEST'、'TEST2'这类值),但array[0].obj的写法是在尝试访问对象中名为"obj"的固定属性——而你的数组对象里根本没有叫obj的属性,只有TEST、TEST2这类属性,所以这行代码自然不会生效。
正确写法
要把变量obj的值当作属性名来用,必须用方括号语法:
function updateArray(obj, acc, opt) { // 用方括号包裹变量obj,JS才会读取它的值作为属性名 array[0][obj].accessible = acc; array[0][obj].optional = opt; }
比如调用updateArray('TEST', '新内容', '可选内容')时,就会正确定位到array[0].TEST这个子对象,顺利更新它的accessible和optional属性。
对比验证
你代码里的array[0].TEST.accessible = acc能正常运行,是因为TEST是固定的属性名字面量,用点语法直接访问完全没问题;而obj是变量,必须用方括号语法才能让JS把它解析为属性名,而不是字面量字符串"obj"。
内容的提问来源于stack exchange,提问作者glotfiovic1v
相关产品推荐
相关产品推荐

