You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么JavaScript中函数参数作为键时dot notation访问对象属性不生效

JavaScript对象属性访问:点表示法与方括号表示法的差异说明

你遇到的执行结果差异,本质是两种属性访问方式的底层解析规则不同导致的,具体原理如下:

1. 点表示法的解析规则

  • 点符号后的内容会被JavaScript引擎直接视为固定的字面量属性名,不会做任何变量解析、表达式计算。
    你代码中写foods.scannedItem时,引擎会直接在foods对象中查找名为scannedItem的属性,而你的foods对象中没有这个key,所以最终返回undefined,完全不会读取scannedItem这个参数存储的实际值。

2. 方括号表示法的解析规则

  • 方括号内部的内容会先做表达式计算,将计算结果转为字符串后,再作为属性名去对象中查找对应值。
    你代码中写foods[scannedItem]时,引擎会先解析scannedItem这个参数,拿到传入的实际值字符串"apples",再去foods对象中查找apples属性,因此能正确返回25。

两种表示法的适用场景

  • 点表示法仅适用于访问属性名固定、且符合JavaScript标识符命名规则的属性(属性名不能有空格、不能以数字开头、不能是JS关键字等),写法更简洁。
  • 方括号表示法适用于以下场景:
    • 需要动态读取变量存储的属性名(也就是你当前的库存查询这类动态属性访问场景)
    • 属性名包含空格、特殊字符、以数字开头等不符合标识符规则的情况,比如foods["fresh apples"]
    • 属性名需要拼接生成的情况,比如foods["orange" + "s"]

内容的提问来源于stack exchange,提问作者Anonymous

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 03:36:05