JavaScript中动态创建对象属性名的核心是ES6计算属性名,即在对象字面量中用方括号包裹表达式(如[key]),使其求值结果作为属性名,支持变量、模板字符串、函数调用等动态生成方式。

JavaScript 中使用动态属性名初始化对象,核心是用方括号 [] 包裹表达式,写在对象字面量的属性位置。这叫“计算属性名”(Computed Property Names),ES6 引入,让属性名可以在创建对象时动态生成。
基本语法:用方括号包裹变量或表达式
直接在对象字面量中,把属性名写成 [expression] 形式,JS 会先求值 expression,再将结果作为属性名:
const key = 'userName';
const user = {
[key]: 'Alice',
['user' + 'Age']: 28,
[`id_${Date.now()}`]: 1001
};
console.log(user);
// { userName: 'Alice', userAge: 28, id_1715234567890: 1001 }
常用于变量、函数返回值或模板字符串
只要表达式最终能转为字符串,就能当属性名。常见场景包括:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 用变量名作为属性名(避免硬编码)
- 拼接字符串生成属性(如带前缀/后缀的字段)
- 调用函数获取键名(如
[getKeyName()]) - 用 Symbol 作为唯一属性名(
[Symbol('id')])
和解构、方法简写一起用更灵活
计算属性名可与 ES6 其他特性组合,比如定义动态方法名或配合解构赋值:
立即学习“Java免费学习笔记(深入)”;
const methodName = 'getData';
const api = {
[`fetch${methodName}`]() {
return 'fetched';
},
[`set${methodName}`](val) {
console.log('set:', val);
}
};
api.fetchGetData(); // 'fetched'
注意点:不能省略方括号,也不能用于对象展开或静态属性
以下写法是错误的:
-
{ [key]: value }✅ 正确 —— 方括号在属性位置 -
{ key: value }❌ 静态名,key 就是字面量字符串 "key" -
{ ...{ [key]: value } }✅ 展开的是已计算好的对象,没问题 -
{ [key]: value, ...rest }✅ 合法,计算属性可与其他属性共存

















