为什么在使用模板字符串时对象解构赋值会抛出错误?
Why does object destructuring assignment throw an error when using template strings?
在JavaScript中,可以像这样通过对象解构来赋值变量:
let a = {b: 2};
let {b} = a;
console.log(b); // 2
有时需要访问的 属性 不是有效的变量名,在这种情况下可以传递一个替代标识符:
let a = {'words with spaces': 2};
let {'words with spaces': words_without_spaces} = a;
console.log(words_without_spaces); // 2
这适用于单引号字符串和双引号字符串。但是,当尝试使用模板字符串执行完全相同的操作时会抛出错误:
let a = {'words with spaces': 2};
let {`words with spaces`: words_without_spaces} = a;
^^^^^^^^^^^^^^^^^^^
SyntaxError: Unexpected template string
为什么这里使用模板字符串会导致错误,而其他字符串不会?我知道模板字符串可以事先定义为一个变量,然后使用计算的 属性 括号传递,但我只是想知道上面代码不起作用的原因是什么。
语言语法允许对象初始值设定项中的 属性 名称或赋值的解构左侧是字符串文字而不是模板。这就是定义语法的方式。
在JavaScript中,可以像这样通过对象解构来赋值变量:
let a = {b: 2};
let {b} = a;
console.log(b); // 2
有时需要访问的 属性 不是有效的变量名,在这种情况下可以传递一个替代标识符:
let a = {'words with spaces': 2};
let {'words with spaces': words_without_spaces} = a;
console.log(words_without_spaces); // 2
这适用于单引号字符串和双引号字符串。但是,当尝试使用模板字符串执行完全相同的操作时会抛出错误:
let a = {'words with spaces': 2};
let {`words with spaces`: words_without_spaces} = a;
^^^^^^^^^^^^^^^^^^^
SyntaxError: Unexpected template string
为什么这里使用模板字符串会导致错误,而其他字符串不会?我知道模板字符串可以事先定义为一个变量,然后使用计算的 属性 括号传递,但我只是想知道上面代码不起作用的原因是什么。
语言语法允许对象初始值设定项中的 属性 名称或赋值的解构左侧是字符串文字而不是模板。这就是定义语法的方式。