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 · 2687 次点击
    这是一个创建于 1428 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    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   ·   实用小工具   ·   2556 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 03:50 · PVG 11:50 · LAX 19:50 · JFK 22:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.