解构之后赋值新变量

常用的解构

const obj = {
   name: '张三'
   age: 19
}

const { age } = obj

解构之后重命名,这种用法是否有隐患
const { age: nianling } = obj

阅读 2.5k
5 个回答

你想说有啥隐患呢?如果你感觉隐隐有些不对,那么这种不安来自哪里?

且不说这么做有没有隐患,我想说为什么需要这么做。

假设有一个对象列表

const persons = [ { name: "James" }, { name: "Jane"} ];

然后要写一个查询函数

function find(name) { }

那么这个查询函数有可能是这样实现的

function findPerson(name) {
    return persons.find(({name}) => name === name);
}

很遗憾,由于 find 里 Lambda 的 name 参数和 findPerson 的 name 参数同名,上面的代码是不能正确执行的。如果不想改 findPerson 的参数名,那就得改 Labmda 的参数。但 Lambda 的参数是是取的属性名,而属性名是不能说改就改的,所以……只好采用重命名语法

function findPerson(name) {
    return persons.find(({ name: n }) => n === name);
}

在函数体内容要把某个对象的属性解构出来的时候,也会遇到类似的问题。这就是为什么需要解构重命名语法的原因。如果你觉得这样写可能存在隐患,大可以不使用解构语法,直接使用对象来处理,比如

function findPerson(name) {
    return persons.find(person => person.name === name);
}

说实在的,在这些情况下,我一般不会使用解构,因为直接使用对象属性访问的语法语义更明确。

解构在某些情况下确实可以减化代码,但用还是不用,主要还是取决于代码是否简单易懂,不会有太多容易造成混淆的东西。


已参与了 SegmentFault 思否社区 10 周年「问答」打卡 ,欢迎正在阅读的你也加入。

1.如果名字起得不好,有被同事乱锤的隐患
2.如果所有结构都这样,有代码体积膨胀的隐患
3.一般是原始字段名称不容易阅读,或者局部有同名变量的情况需要别名,否则就有增加阅读复杂的隐患

已参与了 SegmentFault 思否社区 10 周年「问答」打卡 ,欢迎正在阅读的你也加入。

这是一个正常且常见用法,用法本身没啥隐患。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题