之前一直以为obj.属性名
和obj[属性名]
效果完全一致,直到我遇到 属性名 是不定的情况,这才发现[]
的奇妙之处
总结
- 中括号的妙用:
obj.属性名
里属性名是写死的obj[属性名]
里属性名可以是变量名
问题描述
- 封了个dialog组件,点击不同的下拉框选项时都弹出该组件
- 后端有个请求的属性名要求是变化的,点击不同选项时传递的属性名是不同的
- 即接口接收的参数
params={固定属性名:参数值,可变属性名:参数值}
- 此时使用
obj.属性名
来定义可变参数名显然不可行,这是直接写死的
解决方法
- 改用
obj[属性名]
来定义,此时属性名
可以是变量名,比如:1
2let a = "diffAttributeName";
obj[a] = 123; // 相当于obj.diffAttributeName = 123;
拓展1
- 同样的,在vue中,动态属性是个对象时,对象属性可以使用
[]
用变量来定义,比如:<p :class="{ [mutableClassName]: true, 'immutableClassName': true }"></p>
- vue中用class,react才用className,以及用
.
获取属性时用className (可见《JS Web API 面试题》-“property的操作”)
拓展2
- 定义时就可以使用:
1 | const symbolKey1 = 'key1'; |