【JavaScript】巧妙利用对象解构,实现设置变量默认值或变量重命名

本文探讨了在JavaScript中使用对象解构赋值来优雅地处理默认值的方法,避免了深层属性访问时可能引发的异常,通过示例展示了如何在不同情况下应用解构赋值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很多时候我们经常使用,如下
const list = obj.list || ''
来给变量list设置默认值,保证它不为undefined
但是我觉得这种方式还不够优雅,或者在获取一个比较深的对象的属性值时还可能会被抛异常,比如
const list = obj.data.list || ''
如果data就已经为undefined,那么再去获取list肯定就会抛异常了,最终导致程序中断。
所以,说了这么多。有没有什么解决方案呢?当然是有的,那就是对象解构

talk is cheap, show me the code.

简单的解构

function deconstruct(obj) {
  {
    const {list} = {...obj}
    console.log('直接解构 list=', list)
  }
  {
    const {list = '/'} = {...obj}
    console.log('有默认值的解构 list=', list)
  }
  {
    const {list: pageApi} = {...obj}
    console.log('解构后重命名 pageApi=', pageApi)
  }
  {
    const {list: pageApi = '/'} = {...obj}
    console.log('解构后重命名并设置默认值 pageApi=', pageApi)
  }
}

deconstruct({ list: '/users' })
console.log('----------------')
deconstruct({})
console.log('----------------')
deconstruct(undefined)

控制台输出

直接解构 list= /users
有默认值的解构 list= /users
解构后重命名 pageApi= /users
解构后重命名并设置默认值 pageApi= /users
----------------
直接解构 list= undefined
有默认值的解构 list= /
解构后重命名 pageApi= undefined
解构后重命名并设置默认值 pageApi= /
----------------
直接解构 list= undefined
有默认值的解构 list= /
解构后重命名 pageApi= undefined
解构后重命名并设置默认值 pageApi= /

小结

  • 使用=设置默认值
  • 使用:重命名解构后的变量
  • 即使对undefined进行结构,也不会抛异常,所以可以放心大胆的解构

层级深一点的解构

function deconstruct(obj) {
  const {data = {}} = {...obj}
  const {list = ''} = {...data}
  console.log('list=', list)
  console.log('list=', obj.data.list || '')
}

const url = {
  data: {
    list: '/users'
  }
}

deconstruct(url)
console.log('----------------')
deconstruct({})

控制台输出

这里可以看见使用传统的方式来获取属性值是抛了异常的,
虽然这里是我人为故意传的值造成的,但是在实际开发中难免会遇到这种情况。

list= /users
list= /users
----------------
list= 

console.log('list=', obj.data.list || '')
                                ^
TypeError: Cannot read property 'list' of undefined
### JavaScript 函数参数解构值中的重命名JavaScript 中,函数参数可以通过解构值的方式进行操作。当需要对解构出来的变量重新命名,可以在冒号后面指定新的名称[^3]。 以下是具体的实现方法: #### 使用对象解构重命名 如果希望在解构过程中更改变量的名字,可以直接在大括号 `{}` 内部使用 `原属性名: 新变量名` 的形式完成重命名。例如: ```javascript function greet({ name: userName, age: userAge }) { console.log(`Hello, my username is ${userName} and I am ${userAge} years old.`); } const person = { name: 'Alice', age: 25 }; greet(person); // 输出:Hello, my username is Alice and I am 25 years old. ``` 上述代码中,`name` 被映射到新变量 `userName`,而 `age` 则被映射到新变量 `userAge`。 #### 默认值重命名结合 还可以在同一解构声明中设置默认值。这意味着即使传入的对象缺少某些属性,也不会导致程序报错。例如: ```javascript function introduce({ jobTitle: position = 'Developer', company: organization = 'Unknown Company' }) { console.log(`I work as a ${position} at ${organization}.`); } introduce({}); // 输出:I work as a Developer at Unknown Company. introduce({ jobTitle: 'Manager', company: 'Tech Corp' }); // 输出:I work as a Manager at Tech Corp. ``` 在此示例中,`jobTitle` `company` 都进行了重命名,并设置了各自的默认值[^1]。 #### 复杂嵌套结构的处理 对于更复杂的嵌套数据结构,同样可以应用类似的逻辑来提取重命名字段。比如: ```javascript function displayInfo({ details: { fullName: name, birthYear }, location: city }) { console.log(`Name: ${name}, Born in: ${birthYear}, Lives in: ${city}`); } const userInfo = { details: { fullName: 'John Doe', birthYear: 1980 }, location: 'New York' }; displayInfo(userInfo); // 输出:Name: John Doe, Born in: 1980, Lives in: New York ``` 这里展示了如何深入多层嵌套的数据结构来进行解构以及重命名[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值