js中.?、??、??=的用法和含义

2023-05-16

前言

在项目中我们往往要做很多很多的空值判断进行容错处理,往往伴随着三目运算、与或、if else来使用,不仅要写很多冗余的代码,后期维护起来也是满屏的if else可以说是非常的痛苦了.今天分享几个处理空值简单的方法,希望可以解决大家的一些问题.

可选链(.?)

如果一个值为null、或者是undefined.那么我们再去用点操作符去调用一个方法或者访问一个属性会发生什么?

let a;
let b = a.name;

如果是上面的这样的代码,那么我们能得到一个报错
在这里插入图片描述
其实这种情况就相当于直接在undefined上面访问name属性.undefined和null是两个比较特殊的数据类型,是不能用点操作符去访问属性的.那么在一个变量可能为null、或者undefined的时候,恰巧我又需要访问这个变量的一个属性,那我们应该这样做

let a;
let b;
if(!!a){
	b = a.name;
}else{
	b = undefined;
}

只有当a存在的时候,我才会去访问a的name属性,如果你想再进一步处理,还可以继续判断以下a的数据类型.可是这不是我们今天的重点,就不多讲了.我们可以看到,这样一个简单的逻辑,我们就要写这么多的东西,那么有没有简单的写法呢?看下面的例子

let a;
let b = a?.name;

我们终于看到.?这个东西了,其实这个就叫做可选链,表达的意思,就和刚才if else的例子是一个意思,只有当a存在,同时a具有name属性的时候,才会把值赋给b,否则就会将undefined赋值给b.重要的是,不管a存在与否,这么做都不会报错.

当然我们还可以这么干

let a;
let b;
b = a?.name?.age?.haha?.就是不报错
a?.b?.c(“还是不报错”)

我们看到,你后面可以无限接龙下去,不论有多少属性,只要有最后可以访问到属性,访问到最终的结果,就会赋值给b,否则,就把undefined赋值给b.(这样才有资格叫链式结构嘛)

空值合并运算符(??)

有了上面的例子,接下来我们简单一点,直接上举例

let b;
let a = 0;
let c = { name:'buzhimingqianduan' }

if(!!a || a === 0 ){
	b = a;
}else{
	b = c;
}

对就是上面那个例子,当我们想判断一个值存在,但是它等于0的时候,我们也需要当作它存在,于是就有了上面那样的例子,其实我们还可以这样做

let b;
let a = 0;
let c = { name:'buzhimingqianduan' }

b = a ?? c;

上面的例子,当a除了undefined、或者null之外的任何值,b都会等于a,否则就等于c.

空值赋值运算符(??=)

和上面的例子类似

let b = '你好';
let a = 0
let c = null;
let d = ’123‘
b ??= a;  // b = “你好”
c ??= d  // c = '123'

当??=左侧的值为null、undefined的时候,才会将右侧变量的值赋值给左侧变量.其他所有值都不会进行赋值.同样在一些场景下,可以省略很多代码.

趣味问答时间:

let a;
let b = "不知名前端"
let c = null;
let d = 0;
let e;

e ??= a?.b ?? c ?? d?.a ?? b;
console.log(e)

结果是什么呢???
哈哈一堆的问号.

最后

希望对大家有用,如果方便的话,关注一下,后面我会分享更多前端相关的知识,如果有朋友有想了解的内容,也可以私信我.后面我会找时间分享

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

js中.?、??、??=的用法和含义 的相关文章

  • Win7 32 不能安装STM32 虚拟串口驱动解决方法

    1 对于一些精简过的系统 xff0c 无法安装虚拟串口 xff0c 是由于系统缺少mdmcpq inf和usbser sys文件所造成的 只需要将文件下载下来放在相应的文件夹下面就行了 文件对应的目录如下 xff1a mdmcpq inf在
  • gitee使用教程

    目录 版本控制 1 Gitee上注册账户 2 新建一个远程代码仓 xff0c 点击右上方的加号 3 修改远程仓为开源的 编辑 4 本地下载git 5 克隆远程仓到本地 xff0c 复制地址 6 创建代码并提交到远程仓库 7 将本地代码提交到
  • Telnet 接口的使用(一):Telnet的安装与开启

    什么是 Telnet 简介 telnet 用于远程登录 xff0c Telnet的工作方式为 服务器 客户端 方式 xff0c 它提供了从一台设备 xff08 Telnet客户端 xff09 远程登录到另一台设备 xff08 Telnet服
  • Android系统四层体系架构

    Android体系架构分为四层 xff1a 应用层 应用框架层 库层 内核层 xff08 盗用一张图 xff09 一 应用层 应用层包括手机上的所有APP xff0c 无论是系统自带的还是用户开发的 他们都是基于第二层应用框架层开发的 二
  • 芯片的开发板和评估板的区别

    评估版一般都是半导体生产厂家所提供的 xff0c 用于器件性能评估用 xff0c 大公司不用他来赚钱 xff1b 开发板大多说是通过板子赚钱的 xff0c 就是很多的网友工程师做的 xff1b 目标板是在开发产品的过程中 xff0c 相对于
  • 增量式pid+位置式PID(电机位置闭环控制)

    ps xff1a 2022更新 pid详细解释 一般很少用增量式 xff0c 都是用位置式 xff0c 下文增量式可以不看 本文分为几个部分 xff1a 1 编码器 2 定时器输入捕获 xff08 把定时器初始化为编码器模式 xff09 3
  • Vmware 扩容磁盘

    Vmware 扩容磁盘 第一步 xff0c 首先添加一块磁盘 xff0c 进行分区第二步 xff0c 创建物理卷加入组第三步 xff0c 进行扩容 目录第四步 xff0c 刷新逻辑卷 第一步 xff0c 首先添加一块磁盘 xff0c 进行分
  • 思科模拟器中的交换机使用方法

    思科模拟器中的交换机使用方法 思科模拟器中有较多种交换机型号 xff0c 这里只是简单的介绍一下二层交换机2960 xff0c 以及三层交换机中的3560 1 关于交换机的原理 xff1a 交换机是通过其保存的MAC地址表来进行工作的 xf
  • 计算机发展15件重大事件(图说)

    链接 xff1a https vision xitek com famous 201001 28 36559 html 一 1946年 xff0c 第一台电子计算机 埃尼阿克 问世 二 1976年 xff0c 苹果电脑Apple I现世 三
  • vsftp登录报530 Login incorrect无法登录问题解决

    vsftp登录报530 Login incorrect无法登录问题解决 今天在搭建FTP服务器的时候遇到了530 Login incorrect这个问题 通过修改配置文件解决了 总结了一下在搭建FTP服务器的时要注意的地方大概有下面这几点
  • Linux上SMB挂载提示mount: block device //xxx.xxx.xx.xx/xx is write-protected, mounting read-only时解决办法

    当在Linux上挂载SMB服务器时候有时会提示如下错误 xff1a root 64 test mount o username 61 lisi 192 168 23 32 smb test mount block device 192 16
  • Linux下的LAMP环境搭建时访问PHP页面时变成下载页面的原因

    在搭建LAMP环境的时候遇到了配置完PHP环境后测试访问PHP页面的时候却变成下载的情况 xff0c 主要的影响有一下两个方面 1 PHP的配置问题 2 主要原因是httpd conf配置文件内容出错大致有下面几个地方 xff1a Load
  • 服务器肉鸡/入侵被恶意利用的排查和优化方案

    排查方法 xff1a 1 账户方面 xff1a Windows xff1a xff08 1 xff09 检查服务器内是否有异常的账户 xff0c 查看下服务器内是否有非系统和用户本身创建的账户 xff0c 一般黑客创建的账户账户名 后会有
  • Opensuse如何安装桌面环境

    安装必须的范式 xff1a zypper install t pattern kde kde plasma 编辑 etc sysconfig displaymanager 文件并设定 DISPLAYMANAGER 61 kdm xff0c
  • 怎么用谷歌学术检索下载外文文献

    谷歌学术是一个可以免费搜索外文学术文章的搜索引擎 xff0c 包括了世界上绝大部分出版的学术期刊 xff0c 可广泛搜索学术文献 谷歌学术可了解有关某一领域的学术文献 xff1b 了解某一作者的著述 xff0c 并提供书目信息 xff08
  • 英文文献去哪里查找,8个超强英文文献查找网站建议收藏

    英文文献去哪里查找 xff1f 找对方向用对工具可大幅提升学习和研究效率 xff01 下面详细介绍8个查找英文文献非常好用的网站 一 文献党下载器 xff08 wxdown org xff09 xff1a 该网站几乎整合汇聚了所有文献数据库
  • 基于STM32系列的模拟串口(非阻塞式)

    STM32单片机一般少则3个串口 多则5个 而我这次的项目还偏偏5个硬件串口还是不够用 至于不够用的原因 哎 是项目做到后面有定制 随便哪个串口都省不得 没得办法 只能另想法子咯 板子上有几个预留IO口 可以用来模拟串口 模拟串口一般都选9
  • 复制一个目录下的所有文件到另外一个目录(Java实现)

    首先说说我的思路 xff0c 要复制一个目录下的所有文件到另外的一个目录下 xff0c 我们不知道目录下的结构是怎么样的 xff0c 也不知道目录有多少层 xff0c 文件有多少个 xff0c 这样我们会想用循环 xff0c for 但是我
  • RT-Thread嵌入式操作系统

    一 系统架构 RT Thread xff0c 全称是 Real Time Thread xff0c 顾名思义 xff0c 它是一个嵌入式实时多线程操作系统 RT Thread 主要采用 C 语言编写 xff0c 浅显易懂 xff0c 方便移
  • 1.javascript类型中你不知道的细节

    1 数据类型 基本数据类型 xff1a Undefined xff1b Null xff1b Boolean xff1b String xff1b Number xff1b Symbol xff1b Object 1 1 undefined

随机推荐

  • RT-Thread内核基础

    RT Thread内核基础 1 RT Thread 内核介绍 下图为 RT Thread 内核架构图 xff0c 内核处于硬件层之上 xff0c 内核部分包括内核库 实时内核实现 实时内核的实现包括 xff1a 对象管理 线程管理及调度器
  • 安装和配置VNC服务器的法则

    这是一个关于怎样在你的 CentOS 7 上安装配置VNC服务的教程 当然这个教程也适合 RHEL 7 在这个教程里 xff0c 我们将学习什么是 VNC 以及怎样在 CentOS 7 上安装配置VNC 服务器 我们都知道 xff0c 作为
  • 阿里云轻量应用服务器使用教程

    阿里云轻量应用服务器怎么远程连接 xff1f 轻量服务器可以更换操作系统吗 xff1f 使用轻量应用服务器如何搭建网站 xff1f 轻量应用服务器端口如何开通 xff1f 阿里云百科来详细说下轻量服务器远程连接 搭建网站 开放端口等详细使用
  • 超详细!阿里内部都在用的K8S实战手册,新手看这一篇就够了

    一直关注云计算领域的人 xff0c 必定知道Kubernetes的崛起 如今 xff0c 世界范围内的公有云巨头 xff08 谷歌 亚马逊 微软 华为云 阿里云等等 xff09 都在其传统的公共云服务之上提供托管的Kubernetes服务
  • YOLO目标检测多种改进模型

    写于2020年11月 一 SlimYOLOv3 论文链接 xff1a arxiv org abs 1907 11093 代码链接 xff1a https github com PengyiZhang SlimYOLOv3 二 YOLOV3
  • 解决cv2.error报错解决方案

    问题摘要 xff1a 一般出现如下 xff1a 解决cv2 error OpenCV 4 2 0 C projects opencv python opencv 报错 cv2 error OpenCV 4 2 0 C projects op
  • YOLOv5网络结构分析

  • EraseNet:端到端的真实场景文本擦除方法

    六 相关资源 EraseNet论文链接 xff1a https ieeexplore ieee org document 9180003 EraseNet代码 xff1a https github com lcy0604 EraseNet
  • 《程序人生》

    对乔布斯和马斯克访谈的反思 xff1a 1 这个世界不在乎你的自尊 xff0c 只在乎你自我感觉良好的同时有所成就 说明大多数人的观点是 乌合之众 xff0c 必须有从想到去做到的能力 xff0c 面子是无能者维护尊严的盾牌 2 年轻时候一
  • DiffusionDet:Diffusion Model for Object Detection

    Diffusion Model for Object Detection 一种用于目标检测的扩散模型 Motivation 1 如何使用一种更简单的方法代替可查询的object queries 2 Bounding box的生成方式过去是三
  • springboot整合shiro的小demo(一)

    刚学shiro整合springboot xff0c 在此做一个笔记 xff0c 以便后期忘了查阅 本文分以下几个方面进行整合以及验证 xff1a 1 springboot项目搭建整合thymeleaf实现页面访问 2 springboot整
  • ChatGPT:通用人工智能设计范式方法

    通用人工智能设计范式未来发展方向 https openai com https riscv org 一 ChatGPT xff08 AIGC xff09 开启通用人工智能AGI新纪元时代 二 通用人工智能设计范式现状和方法 目前随着Chat
  • 格拉布斯法—异常值判断(异常值)

    数值数据类型 xff1a 方法一 xff1a Z Score 方法二 xff1a DBSCAN 方法三 xff1a Lsolation Forest 方法四 xff1a Mahalanobis距离 xff08 主要解决多元离散群点问题 xf
  • 你会为AI转型吗? 土豆的思考浅谈

    人工智能意味着什么 xff1f 终身学习与人工智能 复杂 读后感 0 经历 按照自己生活规律每天早上第一件事收发邮件这是昨天打开邮箱后看到的论文和相关论文推荐 xff0c 从1956年诞生以来到2013开始接触这个东西 xff0c 国内我曾
  • 神经网络的过去、现状、未来!

    从BP CNN RNN DCN GAN GNN图网络 GCN CAP三维卷积胶囊模型及融合 人工神经网络是计算智能和机器学习研究的最活跃的分支之一 xff0c 它是从人脑的生理结构出发探讨人类智能活动的机理 从 1943年 McCulloc
  • 场景理解类目标检测SENet

    论文 xff1a Squeeze and Excitation Networks 论文链接 xff1a https arxiv org abs 1709 01507 代码地址 xff1a https github com hujie fra
  • 目标检测发展方向(1)

    从目标检测发展到目标追踪 目标检测 xff08 监督学习 xff09 FasterRCNN CascadeRCNN YOLOX Complex YOLO SSD RetinaNet xff0c FOCS ATSS CornerNet Cen
  • 车道线检测与分割

    https github com amusi awesome lane detection VPGNet论文 xff1a https arxiv org abs 1710 06288 caffe 版code xff1a https gith
  • CAS单点登录原理解析

    1 基于Cookie的单点登录的回顾 基于Cookie的单点登录核心原理 xff1a 将用户名密码加密之后存于Cookie中 xff0c 之后访问网站时在过滤器 xff08 filter xff09 中校验用户权限 xff0c 如果没有权限
  • js中.?、??、??=的用法和含义

    前言 在项目中我们往往要做很多很多的空值判断进行容错处理 往往伴随着三目运算 与或 if else来使用 不仅要写很多冗余的代码 后期维护起来也是满屏的if else可以说是非常的痛苦了 今天分享几个处理空值简单的方法 希望可以解决大家的一