javascript中计算属性名允许对象字面量内用方括号包裹表达式动态生成属性名,支持变量、模板字符串、symbol等,但不适用于解构、类字段,且需防范undefined/null转为字符串的意外键名。

JavaScript 中的计算属性名(Computed Property Names)允许你在对象字面量中用方括号 [] 包裹表达式,让属性名在运行时动态生成,而不是写死的字符串。
基本语法:用方括号包裹动态表达式
在对象字面量里,把属性名写成 [表达式] 的形式,JS 会先求值该表达式,再将其结果转为字符串,作为属性键名。
- 表达式可以是变量、函数调用、模板字符串、甚至简单运算
- 只要最终结果能被隐式转为字符串(比如数字、布尔值、对象的
toString()),就能当键名
常见动态键场景与写法
用变量名作键
const key = 'userName';
const user = { [key]: 'Alice' }; // { userName: 'Alice' }
拼接字符串作键
const prefix = 'is';
const status = 'Active';
const flags = { [`${prefix}${status}`]: true }; // { isActive: true }
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
用 Symbol 作唯一键
const sym = Symbol('id');
const obj = { [sym]: 123 }; // { [Symbol(id)]: 123 }
和 Object.defineProperty / Object.assign 的区别
计算属性名只在对象字面量定义时生效;如果想给已有对象动态加属性,得用其他方式:
-
obj[computedKey] = value—— 最常用,直接赋值 -
Object.defineProperty(obj, computedKey, { value })—— 需要控制属性特性(如是否可枚举、可配置) -
Object.assign(obj, { [computedKey]: value })—— 适合批量合并,但本质还是靠计算属性名在新对象里生成
注意事项
计算属性名不能用于对象解构(左边不能写 { [key]: val }),也不能用于类字段(class fields)或方法简写(如 [key]() {} 是合法的,但 [key] = value 在类中不支持)。
另外,如果表达式结果是 undefined 或 null,会变成字符串 "undefined" 或 "null",容易引发意外键名,建议提前校验。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










