点语法适用于固定合法标识符属性名,中括号支持动态变量、非法字符及关键字属性名;前者简洁但受限,后者灵活且运行时可变。

点语法(.)和中括号语法([])都能访问对象属性,但适用场景和行为有本质差异。点语法简洁直接,适合写死的、合法的标识符属性名;中括号更灵活,能处理动态、非法或特殊命名的属性。
属性名来源是否可变
中括号支持用变量或表达式生成属性名,点语法只能写固定名称:
-
obj['name']和obj.name效果相同,但前者允许把'name'换成变量:const key = 'age'; obj[key] -
obj.key总是读取名为"key"的属性,不会去查变量key的值
属性名是否符合标识符规则
点语法要求属性名是合法的 JavaScript 标识符(不能以数字开头、不能含空格、不能是保留字);中括号无此限制:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
obj['first name']✅ 可行(含空格) -
obj.first name❌ 语法错误 -
obj['2024']✅ 可行(纯数字) -
obj.2024❌ 报错:Unexpected number -
obj['for']✅ 可行(关键字) -
obj.for虽不报错,但语义易混淆,应避免
是否支持运行时动态操作
中括号天然适配动态场景,比如循环赋值、按需拼接属性名、从 API 响应中提取字段:
立即学习“Java免费学习笔记(深入)”;
for (let i = 0; iconst field = response.type === 'user' ? 'email' : 'phone'; obj[field]- 点语法无法实现这类逻辑,必须提前知道确切属性名
是否存在隐式创建行为
两者在读取时都不创建新属性;但在赋值时,点语法和中括号语法对**不存在的属性**行为一致——都会新建属性。真正要注意的是“访问未定义属性”本身不会出错,但后续使用需谨慎:
-
obj.missing→undefined -
obj['missing']→undefined - 二者都不会抛错,也不会自动初始化,仅返回
undefined

















