问题背景
定义了一个常量,然后在一个对象中的属性名中引用该常量中的某个键,然后控制台报错。如下
const {log} = console;
const STATUS = {
OK: 1,
ERROR: 2
}
const handle = {
STATUS.OK: () => {log("it's ok")},
STATUS.ERROR: () => {log("it's error")}
}
let status = 0;
handle[status]();
错误如下:
分析原因
v8引擎解析会将STATUS.OK: () => {log("it's ok")}
解析为STATUS: STATUS,OK: () => {log("it's ok")}
,所以它会告诉你语法错误,此处的"."为不期待的运算符,应该为“,”
解决办法
给该属性值添加中括号[]
const {log} = console;
const STATUS = {
OK: 1,
ERROR: 2
}
const handle = {
[STATUS.OK]: () => {log("it's ok")},
[STATUS.ERROR]: () => {log("it's error")}
}
let status = 1;
handle[status]();
- 结果
提示:对象中如果要使用变量做属性名的话,需要给其添加中括号[],否则js解析引擎解析出来的只是个字符串。