在 JavaScript 中,标识符只能包含字母或数字或下划线(“_”)或美元符号(“$”),且不能以数字开头。
主混淆了字段名和标识符,这是两个不同的概念,你在对象里用的是字段名,你在程序代码里声明变量常量用的是标识符,解构只是一个方便把字段值(或引用)赋值给同名标识符的语法糖而已,并不是说两者是一样的东西。就像是字符串转数值的时候也是只支持符合数值书写规则的字符串,否则就会得到 NaN 。
可以思考一下,如果自己设计一个 JS 引擎,如何解析 “` const { extend/foo } = originObj; ““这种语句,要解析成预期的解构结果,但又不会引起其他语法歧义。
所以按照 JS 对于字段名和标识符的定义来说,在使用解构语法前最好确保字段名的命名规则符合标识符命名规则,否则就不可能创建同名的标识符(就像你自己直接写“`const extend/foo = ‘bar’;“`一样会报错)。
如果只有一个字段要拿,完全可以直接“` const foo2 = originObj[‘extend/foo’]; “`这样既简单,可读性也高。
语言的任何特性都是有其适用场景和不适用场景的,否则旧特性就没有存在的意义了;同样的,解构特性也不是说大家都不要用非解构的写法,而是方便就用、不方便就不用。