从变量名创建对象属性遇异常:预期myProperty却得到b,如何修复?
解决对象属性名用变量赋值的问题
嘿,我猜你肯定是没用到ES6的计算属性名语法!这是个新手常踩的小坑,我来给你说清楚怎么回事。
首先,你之前的写法大概是这样的对吧?
const b = 'myProperty'; const obj = { a: 1, b: 2 }; console.log(obj); // 结果是 {a: 1, b: 2}
为啥会这样?因为在对象字面量里直接写b: 2的时候,JavaScript会把b当成一个普通的字符串属性名,而不是去读取变量b的值。
要让变量的值成为属性名,你需要用方括号把变量包起来,也就是计算属性名的写法:
const b = 'myProperty'; const obj = { a: 1, [b]: 2 }; console.log(obj); // 这时候就会输出 {a: 1, myProperty: 2}
这个方括号的作用就是告诉JS:“去把这个变量的值拿过来当属性名”。而且不止变量,你甚至可以在方括号里放表达式,比如[b + '_test']: 3,它会先计算表达式的结果,再作为属性名。
下次遇到动态设置属性名的场景,记得用这个方括号语法就好啦!
内容的提问来源于stack exchange,提问作者John Smith
相关产品推荐
相关产品推荐

