一般来说解构赋值就是这样:
const originObj = {
foo: 'bar'
}
const { foo } = origin
但是这种怎么解构赋值啊?
const originObj = {
'extend/foo': 'bar'
}
( 这样有点奇怪,多了一个变量名以实现,但是起码能用: [有点不爽而已] )
const { ['extend/foo']: foo2 } = originObj
1
autoxbc 2021-01-30 13:42:43 +08:00
那种奇怪的写法才是结构赋值的本体,那个看起来像本体的其实是语法糖,糖能吃就吃,不符合条件就不吃
|
2
ssshooter 2021-01-30 13:50:03 +08:00
不是 const { 'extend/foo': foo2 } = originObj 就可以了吗?
|
5
no1xsyzy 2021-01-31 00:52:24 +08:00
#2 是在说不需要加中括号。字符串字面量确实不用加
|
6
libook 2021-02-01 12:00:20 +08:00 1
在 JavaScript 中,标识符只能包含字母或数字或下划线(“_”)或美元符号(“$”),且不能以数字开头。
楼主混淆了字段名和标识符,这是两个不同的概念,你在对象里用的是字段名,你在程序代码里声明变量常量用的是标识符,解构只是一个方便把字段值(或引用)赋值给同名标识符的语法糖而已,并不是说两者是一样的东西。就像是字符串转数值的时候也是只支持符合数值书写规则的字符串,否则就会得到 NaN 。 可以思考一下,如果自己设计一个 JS 引擎,如何解析 ``` const { extend/foo } = originObj; ````这种语句,要解析成预期的解构结果,但又不会引起其他语法歧义。 所以按照 JS 对于字段名和标识符的定义来说,在使用解构语法前最好确保字段名的命名规则符合标识符命名规则,否则就不可能创建同名的标识符(就像你自己直接写```const extend/foo = 'bar';```一样会报错)。 如果只有一个字段要拿,完全可以直接``` const foo2 = originObj['extend/foo']; ```这样既简单,可读性也高。 语言的任何特性都是有其适用场景和不适用场景的,否则旧特性就没有存在的意义了;同样的,解构特性也不是说大家都不要用非解构的写法,而是方便就用、不方便就不用。 |