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

JavaScript对象属性方括号语法解析:为何用变量值作属性名

问题解答

第10行{[last]: newObj}的执行逻辑

这行代码会生成一个临时对象:

  • 先读取函数参数last的实际值(调用foo('bye', 'hey')时,last的值是'hey')
  • 把这个值作为临时对象的属性名,属性值则是提前定义好的newObj(即{name: 'newObj'})
  • 最后通过Object.assign把这个临时对象的属性合并到空对象obj里,让obj拥有该属性。

为什么能用last的值而非last本身作为属性名

这是ES6新增的计算属性名语法。在对象字面量中,用方括号[]包裹的表达式会被优先求值,求值结果会直接作为对象的属性名。如果不用方括号,直接写{last: newObj},那属性名就是固定字符串'last',而非变量last存储的值。

举个直观的对比例子:

let last = 'hey';
// 计算属性名:属性名是last的值'hey'
const obj1 = {[last]: 'value'}; // { hey: 'value' }
// 普通写法:属性名是字符串'last'
const obj2 = {last: 'value'}; // { last: 'value' }

回到你的代码,正是因为使用了计算属性名,最终obj的属性名才是传入的'hey',而非固定的'last'。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 02:10:26