链判断运算符

如果我们要获取一个对象的深层嵌套属性,例如获取文章标题res.data.article.title,然后为了安全起见,我们肯定不能直接这样获取,万一res对象没有article属性了呢,直接原地爆炸

// 不安全
const { title} = res.data.article

绝大多数情况下我是这样获取

// 安全
const title = res&&res.data&&res.res.data.article&&res.data.article.title || '默认标题'

如果嵌套层级不深的话还可以使用三目运算符,例如获取res.account

const account = res ? res.account : '柏成'

上面的写法稍微有些臃肿,如果使用链判断运算符?.可以稍稍简化些代码,是不是变得更优雅...

const title = res?.data?.article?.title || '默认标题'
const account = res?.account || '默认账号'

Null判断运算符

对于res?.data?.article?.title || '默认标题'来说,我们通过逻辑或运算符||指定了默认值,我们可能想的是属性titleundefinednull时启用默认值,但是呢,title属性为''false0NaN时,默认值也会生效,这就背离了我们的开发初衷

如果使用Null判断运算符??的话,就解决了这样的问题,只有仅当??左侧为undefinednull才会启用默认值

const title = res?.data?.article?.title ?? '默认标题'
const account = res?.account ?? '默认账号'

需要注意的是,??&&||一起使用的时候,必须用小括号表明优先级,否则会报错。

// 报错
title && account ?? '默认标题'
title || account ?? '默认标题' // 不报错
(title && account) ?? '默认标题'
(title || account) ?? '默认标题'

最新文章

  1. js判断数据类型
  2. How to create a batch of VMs with PowerShell
  3. Linux下WebSphereV8.5.5.0 安装详细过程
  4. Mac OSX 无法SSH远程的原因
  5. ubuntu下常用服务器的构建
  6. [转] 編程風格要素-The Elements of Programming Style 中文英文中英對照
  7. 搭建Spring + SpringMVC + Mybatis框架之二(整合Spring和Mybatis)
  8. C# 之 HttpWebRequest类
  9. 命令行创建Android应用,生成签名,对APK包签名并编译运行
  10. SharePoint SiteCollection Administrator
  11. BAE 环境下配置 struts2 + spring + hibernate(SSH)(二)struts2
  12. Android 单指触控拖拽,两指触控缩放
  13. OS X 键盘快捷键
  14. 391.FANUC宏程序编程
  15. 使用Spring MVC测试Spring Security Oauth2 API
  16. Navicat Premium连接各种数据库
  17. 标准库 svc—程序及服务控制
  18. Java内存模型简析
  19. Android下移植tcpflow
  20. 实现全站 HTTPS ,为什么国内网站总是那么slow&&low呀!

热门文章

  1. python 与 百度人脸识别api
  2. 关于vm.min_free_kbytes的合理设置推测
  3. 莫小安 Linux下Redis的安装与配置
  4. [原题复现]SUCTF 2019 WEB EasySQL(堆叠注入)
  5. 看阿里P7讲MyBatis:从MyBatis的理解以及配置和实现全帮你搞懂
  6. FLstudio 系列教程(六):如何安装FL studio
  7. SQL相关子查询是什么?和嵌套子查询有什么区别?
  8. jmeter脚本的编写
  9. k8S 搭建集群
  10. 从数据仓库双集群系统模式探讨,看GaussDB(DWS)的容灾设计