关于JavaScript动态对象属性方括号使用时机的技术咨询
JavaScript动态对象属性:何时使用方括号语法?
在JavaScript的对象字面量中,属性名的写法分两种场景,直接决定了你要不要用方括号:
1. 静态属性名:不需要方括号
如果属性名是固定的字符串或合法标识符,直接写就行,不用套方括号。比如你代码里的cur.age是赋值的「值」部分,而如果是定义固定属性名(比如{ age: 18 }),这里的age是固定的,直接写就对了。
这种场景下,对象字面量里的属性名和你用点语法访问(比如obj.age)是对应的,都是固定的名称。
2. 动态属性名:必须用方括号
当属性名需要通过变量、表达式计算出来的时候,必须用方括号[]把这个变量/表达式包起来。
回到你的代码:
const array = [ {name: 'A', age: 1}, {name: 'B', age: 2}, {name: 'C', age: 3}, ]; const example = (array) => { return array.reduce((acc, cur) => {return {...acc, [cur.name]: cur.age} }, {}) } console.log(example(array));
这里的cur.name是一个变量,每次循环它的值会变成'A'、'B'、'C'——你要的是把这些值作为新对象的属性名,而不是把字符串'cur.name'当属性名。如果去掉方括号写成cur.name: cur.age,最终得到的会是{ cur.name: 3 }(最后一个值覆盖前面的),完全不符合预期。
再举几个动态属性的例子:
- 用表达式生成属性名:
{ [2 * 3]: 'six' }→ 结果是{ 6: 'six' } - 用变量做属性名:
const prop = 'email'; { [prop]: 'test@example.com' }→ 结果是{ email: 'test@example.com' }
一句话总结
- 属性名是固定死的字符串/标识符 → 直接写,不用方括号
- 属性名需要动态计算(变量、表达式) → 必须用方括号包裹
内容的提问来源于stack exchange,提问作者2AM Coffee
相关产品推荐
相关产品推荐

