这种带特殊字符属性名怎么用 es6 解构赋值啊? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a Javascript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
Javascript 权威指南第 5 版
Closure: The Definitive Guide
az22c
V2EX    Javascript

这种带特殊字符属性名怎么用 es6 解构赋值啊?

  •  
  •   az22c 2021-01-30 13:27:31 +08:00 3013 次点击
    这是一个创建于 1715 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一般来说解构赋值就是这样:

    const originObj = { foo: 'bar' } const { foo } = origin 

    但是这种怎么解构赋值啊?

    const originObj = { 'extend/foo': 'bar' } 

    ( 这样有点奇怪,多了一个变量名以实现,但是起码能用: [有点不爽而已] )

    const { ['extend/foo']: foo2 } = originObj 
    6 条回复    2021-02-01 12:00:20 +08:00
    autoxbc
        1
    autoxbc  
       2021-01-30 13:42:43 +08:00
    那种奇怪的写法才是结构赋值的本体,那个看起来像本体的其实是语法糖,糖能吃就吃,不符合条件就不吃
    ssshooter
        2
    ssshooter  
       2021-01-30 13:50:03 +08:00
    不是 const { 'extend/foo': foo2 } = originObj 就可以了吗?
    az22c
        3
    az22c  
    OP
       2021-01-30 15:00:10 +08:00
    @autoxbc 牛逼 学习了
    @ssshooter 是可以,但多出一个 foo2 变量名,搜索替换维护起来麻烦一点点而已
    zedhugh
        4
    zedhugh  
       2021-01-30 15:10:22 +08:00
    @az22c extend/foo 这个符号再 js 里面也不能作为变量名啊
    no1xsyzy
        5
    no1xsyzy  
       2021-01-31 00:52:24 +08:00
    #2 是在说不需要加中括号。字符串字面量确实不用加
    libook
        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']; ```这样既简单,可读性也高。

    语言的任何特性都是有其适用场景和不适用场景的,否则旧特性就没有存在的意义了;同样的,解构特性也不是说大家都不要用非解构的写法,而是方便就用、不方便就不用。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2157 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 00:32 PVG 08:32 LAX 17:32 JFK 20:32
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86