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_
相关产品推荐
相关产品推荐

