不使用Object方法访问对象:`stocks[item[0]].inventory`逻辑解析
理解
stocks[item[0]].inventory的工作逻辑 一、[item[0]]定位对象属性的核心原理
JavaScript里访问对象属性有两种方式:点符号(.)和方括号符号([]),这里用的是后者,核心逻辑是动态通过字符串键名获取属性值:
- 先看
item[0]:在fruits.items.every()的遍历里,item是fruits.items里的每个子数组(比如第一个是['Mangoes', 50]),item[0]就是子数组的第一个元素,也就是字符串类型的水果名称('Mangoes'或'Apples')。 - 方括号的作用:把
item[0]的字符串值当作对象的属性名,直接从stocks里取出对应的属性值。比如当item[0]是'Mangoes'时,stocks[item[0]]就等价于stocks.Mangoes;如果属性名带空格(比如'Star Apple'),点符号没法用,方括号却能直接处理stocks['Star Apple'],这也是方括号的优势。
二、代码的完整执行逻辑
把stocks[item[0]].inventory拆成三步看:
- 遍历取数:
fruits.items.every()逐个处理数组里的子元素,第一次循环item是['Mangoes', 50],第二次是['Apples', 30]。 - 定位属性:
item[0]拿到水果名称字符串,用stocks[item[0]]从stocks对象中取出对应的数据——第一次取到{inventory: 300, cost: 2.00},第二次取到100(注意这里stocks.Apples是直接存的数字,不是对象,所以运行时stocks['Apples'].inventory会报错,因为数字没有inventory属性)。 - 提取子属性:
.inventory是从前面拿到的对象中取出库存数值,再和item[1](要取用的数量,比如50、30)做大小比较。
三、和Object.entries/keys/values的区别
你提到的这些方法是用来遍历对象的全部键/值/键值对,比如Object.entries(stocks)会把stocks转成[['Mangoes', {...}], ['Apples', 100], ...]的数组,你可以遍历这个数组找到对应键的值,但stocks[item[0]]是直接通过已知键名定位单个属性,不需要遍历整个对象,效率更高,是动态获取单个属性的直接方式。
四、谷歌搜索关键词
- JavaScript 对象方括号属性访问
- JavaScript dynamic object property access
- JavaScript 方括号 vs 点符号访问属性
- JavaScript 对象属性动态获取
内容的提问来源于stack exchange,提问作者mattsimon2024
相关产品推荐
相关产品推荐

