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

【JS重点12】解构赋值-对象解构 总结了对象解构的基础知识点,以及由基础知识点拓展的案例 阅读详情

很多时候我们经常使用,如下
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
基于STM32智能震动报警器震动检测声光报警系统设计 *单片机设计介绍,基于STM32智能震动报警器震动检测声光报警系统设计。 阅读详情

相关推荐

Dirsearch的下载、安装和使用(全)

Dirsearch工具的下载、安装和使用,超详细超全面

weixin_68416970的博客 1万+

【JavaScript】解构时重命名

js对象解构时重命名

allanGold 2269

面试复习题--RN面试

考察点:热更新方案的深度理解,选型能力,实战落地经验。答题思路主流热更新方案对比。

hqiangtai的博客 723

JS 解构赋值

ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,被称为解构赋值。这种写法属于“模式匹配”。这种方式的出现大大提高了代码的扩展性。

weixin_46015333的博客 4836

PRPD图谱分析从入门到精通:5种典型放电模式的识别手册

本文详细解析PRPD图谱分析技术,重点介绍电晕放电、悬浮放电等5种典型放电模式的识别方法。通过37组真实案例对比,提供关键识别区和诊断流程图模板,帮助工程师快速掌握变电站设备状态监测的核心技能,提升绝缘缺陷诊断准确率。

weixin_29214199的博客 466

Chapter 4 Ripple-Based Control Technique Part I

本文介绍了DC-DC转换器的纹波控制技术,重点分析了迟滞控制、恒定开通时间控制、恒定关断时间控制等方案的工作原理及优缺点。纹波控制无需补偿网络,具有快速瞬态响应和结构简单的优势,特别适合电池供电应用。其中,恒定开通时间控制在轻载时能自动延长关断时间,实现伪定频工作;而恒定关断时间控制轻载效率较低。文章还讨论了纹波注入技术解决Boost转换器右半平面零点问题,并比较了不同控制方案在负载瞬态下的性能表现。最后指出基于纹波的控制技术在提高调节精度和降低EMI方面的改进方向。

2304_76736886的博客 1299

javascript解构赋值

javascript解构赋值

qq_40787608的博客 2019

WorkBuddy Skill赋能HYSYS与Comsol:AI工作台下的仿真自动化实践

AI Agent正将工业软件自动化带向新高度。在工程仿真领域,流程模拟与多物理场分析常因重复性操作而效率低下,Aspen HYSYS的批量工况调整、Comsol的参数扫描与网格重构均属此类。WorkBuddy这类AI工作台通过Skill将软件二次开发能力封装为可插拔技能包,利用HYSYS的COM/OLE接口和Comsol的Java API,实现自然语言指令到自动化执行的转变。其技术价值在于降低自动化门槛、沉淀工程经验,并支持日志审计与异常重试。在实际应用中,无论化工流程的灵敏度分析,还是激光焊接、移动网格等

weixin_29055699的博客 295

【笔记】js 解构赋值中的:默认值、重命名

解构赋值使用就是爽!可是今天不小心被卡住了,需解构的。,而这两个都需要拿到,这样怎么解构呢?

程序边界 3014

Linux安装消息队列IBM MQ 7.5开发版安装配置详解

消息队列IBM MQ 7.5开发版安装配置详解 文章目录消息队列IBM MQ 7.5开发版安装配置详解前言一、什么是IBM MQ?二、安装前准备1、安装前准备2、安装MQ Server3、启动实例4、创建队列一个名为TEXT的队列(测试)5、启动端口监听6、启动成功总结 前言 IBM 已经熟练地优化了 MQ(消息队列),在市场上已有超过 25 年的历史。借助 MQ(消息队列),如果无法立即传递消息,那么会在其等待队列中确保消息安全,直到保证传递为止。竞争产品可能会传递两次消息或根本不传递消息,而 M

zhx__的博客 5162

Fiddler everywhere的一些基础操作

网上能搜到的Fiddler everywhere使用教程太少,于是我整理了一些自己实操成功的内容,包括Fiddler everywhere的Mock测试、弱网测试等基础操作,后续还会持续更新。操作系统:macOS使用工具:Fiddler everywhere 5.10.0本文简单介绍了使用Fiddler everywhere进行的Mock测试和弱网测试,而Fiddler everywhere提供了更多的其他实用的功能,我会在后期进行一个持续的学习和更新。

weixin_44346646的博客 2478

小白也能秒懂:JavaScript 解构赋值的“外挂”人生

愿斯文对汝有所裨益,纵其简陋未及渊博,亦足以略尽绵薄之力。希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。一个做过前端开发的产品经理,经历过睿智产品的折磨导致脱发之后,励志要翻身农奴把歌唱,吾辈才疏学浅,摹写之作,恐有瑕疵。解构赋值的出现,就是为了拯救“点操作符滥用综合征”。防止不传参时报错,这是“防御性编程”的小棉袄。:整条语句外加括号,告诉解释器“我不是代码块”。场景:后端返回的字段名是下划线,前端要用驼峰。不存在的,我直接一次性拔光。

一个做过前端开发的产品经理,经历过睿智产品的折磨导致脱发之后,励志要翻身"农奴"把歌唱,一边打入敌人内部一边持续提升自己,为我们广大开发同胞谋福祉,坚决抵制睿智产品折磨我们码农兄弟! 1024

如何通过插值法计算cell delay?

插值法的公式:Z = A + B * X + C * Y + D * X * Y,其中X为input transition,Y为output load,A、B、C、D为四个参数,Z为delay值。从而得到Z=-0.086176 + 11.5493 * x + 0.65917 * y - 24.859 * x * y,当X=0.014930、Y=0.296311时,得到Z=0.1716ns。从而得到A = 0.08075,B = 3.47539,C = 0.04008,D = 0.01648。

芯冰乐 1076

ECMASCRIPT 6 实战之 解构赋值

相信解构赋值(Destructuring)自 ECMASCRIPT 6(以下简称 ES 6) 面世以来被大家快速地熟悉并运用到实际开发中了, 这是一种能有效减少代码量,使代码逻辑更简单优雅的技术, 下面我们就再来回顾、总结一下解构赋值的种种用法吧 基本用法 从对象解构 假设有一个 AritleDetail 对象,它的结构为: const AritleDetail = { ...

weixin_34209406的博客 333

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

JavaScript | 【基础】黑马程序员前端JavaScript入门到精通全套视频教程,javascript核心进阶ES6语法、API、js高级等基础知识和实战教程

JavaScript | 【基础】黑马程序员前端JavaScript入门到精通全套视频教程,javascript核心进阶ES6语法、API、js高级等基础知识和实战教程

这里有一只小马吖 1612

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

MongoDB隐藏技能:如何重命名数据库

MongoDB隐藏技能:如何重命名数据库 问题产生的背景 最近Java组的同事向我请教了一个问题,就是他们发现Navicat中对mysql之类的数据库都有重命名DB名字的功能,但是针对mongodb竟然没有这个功能,作为强迫症的开发者,不能改名,绝对不能忍。 头脑风暴的解决方案 大家提供的想法是通过copydb来实现,将数据库的数据拷贝到命名好的数据库中,然后删除老的数据库,但是我们现有的DB里数...

weixin_33692284的博客 685

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

javascript 三个点_10个超级实用的JavaScript开发技巧

英文 |https://blog.bitsrc.io/10-super-useful-tricks-for-javascript-developers-f1b76691199b翻译 | web前端开发 (ID:web_qdkf)众所周知,JavaScript一直在迅速变化。借助新的ES2020,引入了许多很棒的功能,你可能想知道这些功能。老实说,你可以通过许多不同的方式编写代码。他们可...

weixin_31088435的博客 127

周末学会了 10个超级实用 Javascript 技巧!

众所周知,JavaScript 一直在快速变化。在新的 ES2020 中,有很多很棒的特性,我们大都已经迫不及待尝试了。老实说,有时我们可以用不同角度来编写代码,同样也能达到相同的效果,而且有的还会更简短,更清晰。 下面是列出一些 JavaScript 有用的技巧,相信总有一天会对你有所帮助。 1.方法参数验证 ES6 中可以为函数的参数设置默认值,有了这个,我们可以实现一个验证方法参数不能为空的巧妙技巧。 const isRequired = () => { throw new Er

JNPF快速开发平台的博客 337

2020年最需要学习的10个超级实用 Javascript 技巧!

众所周知,JavaScript 一直在快速变化。在新的 ES2020 中,有很多很棒的特性,我们大都已经迫不及待尝试了。老实说,有时我们可以用不同角度来编写代码,同样也能达到相同的效果,而且有的还会更简短,更清晰。 下面是列出一些 JavaScript 有用的技巧,相信总有一天会对你有所帮助。 1.方法参数验证 ES6 中可以为函数的参数设置默认值,有了这个,我们可以实现一个验证方法参数不能为空的巧妙技巧。 const isRequired = () => { throw new Error('

麦 -_- 的博客 213

JavaScript Refactor — 提升前端开发效率的秘密武器

JavaScript Refactor — 提升前端开发效率的秘密武器 项目介绍 JavaScript Refactor 是一款专为 Sublime Text 2 和 3 设计的插件,它致力于提升开发者在编写 JavaScript 代码时的工作效率和代码质量。这个强大的工具集成了变量与函数定义跳转、局部变量或函数重命名、引入变量以及提取方法等核心功能,让代码重构变得轻松简单。 项目技术分析 Jav...

gitblog_00069的博客 500

Hieroglyphy:让JavaScript代码秒变神秘符号艺术,浏览器中也能运行的终极转换工具

Hieroglyphy是一款令人惊叹的终极转换工具,它能将任何JavaScript代码转换为仅由()[]{}+!这些神秘符号组成的等效序列,并且在浏览器中也能完美运行。这一独特功能为开发者带来了全新的代码体验和无限可能。 ## 🌟 什么是Hieroglyphy? 简单来说,Hieroglyphy是一个强大的工具和JavaScript库,专注于将字符串、数字和脚本转换为仅包含()[]{}+!字

gitblog_00818的博客 806

《JavaScript 性能优化:数据结构与算法的巧妙运用》

JavaScript 性能优化是一个综合性的工作,涉及到代码编写的各个层面。从减少 DOM 操作和优化内存管理,到选择高效的算法和数据结构,再到合理运用异步编程等,每一个优化点都可能对网页应用的性能产生显著影响。在实际开发中,我们需要根据具体的业务需求和场景,综合运用这些优化策略,打造出高效、流畅的 Web 应用,为用户提供更好的体验。随着 JavaScript 语言的不断发展和浏览器技术的持续进步,性能优化的方法和工具也在不断更新,开发者需要持续学习和关注,以保持代码的高性能。

deying0865423的博客 1069

JavaScript代码整洁之道-变量篇

JavaScript代码整洁之道-变量篇变量名要名副其实变量名可以读出来不要在名称中使用变量的类型对同一类型的变量使用相同的词汇表不要添加不需要的上下文不要使用魔法数字和字符串结论 变量名要名副其实 变量的名称必须能够描述出该变量的作用和用途。也就是说,我们不应该用 x 或 y 这样的名字去作为变量名,除非我们正在开发数学软件,在数学的语境中,这些名字是准确的。在其他的情况下,应该避免使用这种变量名,因为它无法描述出该变量的真实用途,使代码难于理解。 首先,如果我们调用一个名字为 x 的变量,我们能否立刻知

qq_36174666的博客 371

如何用H2OVL-Mississippi-2B实现多轮图像对话?完整Python示例教程

H2OVL-Mississippi-2B是一款功能强大的多模态AI模型,能够实现与图像的多轮对话交互。本文将为您提供一个简单快速的Python实现教程,帮助您轻松掌握使用H2OVL-Mississippi-2B进行多轮图像对话的方法。 ## 为什么选择H2OVL-Mississippi-2B进行图像对话? H2OVL-Mississippi-2B在2B参数规模的模型中表现出色,在8个单图像基准

gitblog_00532的博客 661

一个好的前端开发人员必须掌握的前端代码整洁与开发技巧

默认值放到最后可以让函数少传实参还能正常执行,收获预期结果。求和函数,把具有默认值的参数放在参数列表「左边」第1个实参 总是对应 第1个形参所以,3 赋值给 a, 替换掉默认值 10参数b没有传值,最终函数返回NaN求和函数,把具有默认值的参数放在参数列表「右边」3 赋值给 ba 没有传值,使用默认值 10。

林夕 1219

Ant Design Blazor Switch 开关组件详解:双向绑定、受控模式与源码级实现剖析

在 ant-design-blazor 中,`Switch`(开关)是数据录入类组件中最轻量却最容易踩坑的成员之一:官方文档的"基本"示例只用一行 `<Switch @bind-Checked="switchValue"/>` 就完成接入,但围绕它的双向绑定链路(`Checked`/`Value` 双通道)、`Control` 受控模式、`Loading`/`Disabled` 的优先级关系,以及

gitblog_00560的博客 405
上一篇: 【IDE】IntelliJ IDEA 设置文件编码、SSH终端编码为UTF-8
下一篇: 【面试突击】Java中String类为什么要设计成final?
tanpenggood
博客等级 码龄9年 129粉丝 197原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值