跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 这种带特殊字符属性名怎么用 es6 解构赋值啊?
未分類
17 1 月 2021

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

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

資深大佬 : az22c 4

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

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

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

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

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

const { ['extend/foo']: foo2 } = originObj 

大佬有話說 (6)

  • 資深大佬 : autoxbc

    那种奇怪的写法才是结构赋值的本体,那个看起来像本体的其实是语法糖,糖能吃就吃,不符合条件就不吃

  • 資深大佬 : ssshooter

    不是 const { ‘extend/foo’: foo2 } = originObj 就可以了吗?

  • 主 資深大佬 : az22c

    @autoxbc 牛逼 学习了
    @ssshooter 是可以,但多出一个 foo2 变量名,搜索替换维护起来麻烦一点点而已

  • 資深大佬 : zedhugh

    @az22c extend/foo 这个符号再 js 里面也不能作为变量名啊

  • 資深大佬 : no1xsyzy

    #2 是在说不需要加中括号。字符串字面量确实不用加

  • 資深大佬 : libook

    在 JavaScript 中,标识符只能包含字母或数字或下划线(“_”)或美元符号(“$”),且不能以数字开头。

    主混淆了字段名和标识符,这是两个不同的概念,你在对象里用的是字段名,你在程序代码里声明变量常量用的是标识符,解构只是一个方便把字段值(或引用)赋值给同名标识符的语法糖而已,并不是说两者是一样的东西。就像是字符串转数值的时候也是只支持符合数值书写规则的字符串,否则就会得到 NaN 。

    可以思考一下,如果自己设计一个 JS 引擎,如何解析 “` const { extend/foo } = originObj; ““这种语句,要解析成预期的解构结果,但又不会引起其他语法歧义。

    所以按照 JS 对于字段名和标识符的定义来说,在使用解构语法前最好确保字段名的命名规则符合标识符命名规则,否则就不可能创建同名的标识符(就像你自己直接写“`const extend/foo = ‘bar’;“`一样会报错)。

    如果只有一个字段要拿,完全可以直接“` const foo2 = originObj[‘extend/foo’]; “`这样既简单,可读性也高。

    语言的任何特性都是有其适用场景和不适用场景的,否则旧特性就没有存在的意义了;同样的,解构特性也不是说大家都不要用非解构的写法,而是方便就用、不方便就不用。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具