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

2023-05-16

参考链接1
参考链接2

可选链运算符(?.)

可选链运算符(?.)类似于链式运算符(.),不同之处在于在引用为null或undefined时不会报错,而是短路返回undefined

let a;
let b = {name:'xxx'}
let c = [1,2,3]
let d = a?.name; // undefined
d = b?.name; // 'xxx'
d = b?.['name']; // 'xxx'
d = c?.[0]; // 1

let d = a?.name;举例,意思是只有当a存在,且a有name这个属性时,才会把a.name的值赋给d,否则会给d赋值undefined,且不会报错

let a = {
	getName:()=>{
		return '123'
	}
}
let result1 = a?.getName?.(); // 123
let result2 = a?.setName?.(); // undefined

与函数调用一起使用时,如果给定的函数不存在,则返回undefined,不会报错

注意: 如果被当作方法调用的是一个属性,使用?.还是会报错

空值合并运算符(??)

let a = null;
let b = 1;
let c = a ?? b; // 1

意思是只有当??左侧为null或undefined时,才会返回右侧的值,否则返回左侧值

常用空值合并运算符给常量赋默认值,保证其不会null或undefined

给变量赋默认值,常用逻辑或运算符(||),逻辑或运算符是一个布尔逻辑运算符,左侧会被强制转换成布尔值,任何的假值(0,‘’,NaN,null,undefined)都不会被返回

注意: ??不能和&&、||组合使用,因为空值合并运算符和其他逻辑运算符之间的运算优先级是未定的,会报错,可使用()来显式表明运算优先级

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

let a;
let b = '123';
let c = 'qwer'
a ??= b;// '123'
b ??= c;// '123'

意思是只有当??=左侧的值为undefined、null时,才会把右侧的值赋给左侧,否则左侧不会被赋值

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

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

随机推荐

  • SpringBoot事件监听器的四种方式

    Java事件监听 事件监听的概念 xff1a 事件监听就是让电脑通过你的操作得到一些数据并对这些数据做出反应 xff0c 反馈相应的行为或者指令的操作 java中的事件机制的参与者有3种角色 xff1b event object 事件状态对
  • OAI搭建步骤(EPC+eNB)

    声明 xff1a 本文CSDN作者原创投稿文章 xff0c 未经许可禁止任何形式的转载 xff0c 原文链接 文章目录 一 系统概述二 搭建核心网EPC openair cn 2 1 准备主机2 2 更换内核2 3 获取openair cn
  • Layui网址

    http laizhefa com layer index html
  • Spring Security

    Spring Security简介 Spring Security是一个高度自定义的安全框架 利用Spring IOC DI和AOP功能 xff0c 为系统提供了声明式安全访问控制功能 xff0c 减少了为系统安全而编写大量重复代码的工作
  • Hibernate基本使用

    Hibrenate框架 一 Hibrenate 1 是一个持久层框架 xff0c 实现jdbc的封装 是一个全自动的ORM框架 2 ORM xff1a 对象 关系 数据库表 映射 xff0c orm致力于将数据库操作转换成Java程序熟悉的
  • Nginx学习笔记

    文章目录 一 Nginx初始二 正向代理和反向代理 xff08 一 xff09 正向代理 xff08 二 xff09 正向代理的使用场景 xff08 三 xff09 反向代理 xff08 四 xff09 反向代理的使用场景 三 Nginx的
  • Mybatis+Mybatis-plus+SpringBoot整合(完整版)

    文章目录 一 Mybatis xff08 一 xff09 Mybatis简介1 Mybatis历史2 Mybatis特性3 Mybatis下载4 和其它持久化层技术对比 xff08 二 xff09 搭建Mybatis1 MySQL不同版本的
  • SpringMVC+SSM整合(完整版)

    文章目录 一 SpringMVC xff08 一 xff09 SpringMVC简介1 什么是MVC2 什么是SpringMVC3 SpringMVC的特点4 MVC的工作流程 xff08 二 xff09 入门案例1 创建maven工程 引
  • C语言实现CNN的前向推理

    利用Python训练模型 xff0c 提取模型参数到C语言的头文件 xff0c C语言进行前向推理计算 目录 1 填充算子1 1多维数组实现1 2一维数组实现 2 卷积算子2 1多维数组实现2 2一维数组实现 3 池化算子3 1多维数组实现
  • 树莓派3B+安装系统

    系统镜像下载 树莓派官方镜像下载地址 xff1a https www raspberrypi org downloads xff08 如果找不到就点击See all download options xff09 https www rasp
  • ubuntu16.04安装中文输入法并设置显示中文

    参考自 xff1a https jingyan baidu com article bad08e1ef4b2f109c85121b7 html 原材料 xff1a ubuntu16 步骤 xff1a 1 在桌面的最左边选择设置 xff08
  • 用PrtSc键触发启动flameshot

    进入系统设置中的 键盘快捷键 先将系统默认的快捷键prt sc禁用 xff0c 否则可能不能再设置用这个快捷键 页面中会列出所有现有的键盘快捷键 xff0c 拉到底部会看见一个 43 按钮 点击 43 按钮添加自定义快捷键并输入以下两个字段
  • 在GitHub的README中使图片深浅主题自适应

    声明 xff1a 本文CSDN作者原创投稿文章 xff0c 未经许可禁止任何形式的转载 xff0c 原文链接 在GitHub的Markdown文件中 xff0c 我们可以针对同一图片使用两份深浅主题的链接 xff0c 以保证在适应GitHu
  • P4:正则表达式(Regular Expression)学习笔记

    正则表达式学习 1 初始正则表达式1 1正则表达式练习11 2正则表达式练习21 3正则表达式练习3 2 正则表达式源码分析2 1 源码分析 matcher find 2 2源码分析 matcher group 0 2 3 整体代码2 4源
  • AutoML-sklearn and torch

    一 auto sklearn 1 1 环境依赖 额外安装swig 第三方库 linux 支持 mac xff0c windows不支持 1 2 示例代码 time left for this task 设定任务最大时间 per run ti
  • AB实验人群定向HTE模型5 - Meta Learner

    Meta Learner和之前介绍的Causal Tree直接估计模型不同 xff0c 属于间接估计模型的一种 它并不直接对treatment effect进行建模 xff0c 而是通过对response effect target 进行建
  • 【第一季】全面认识海思HI3518E方案和SDK环境搭建

    文章内容来自朱有鹏的 朱老师物联网大讲堂 的嵌入式企业级项目 海思HI3518E方案视频编解码传输深度学习 xff0c 转载请注明出处 目录 一 xff0c 视频设备开发的技术流二 xff0c HI3518E方案系统整体架构介绍三 xff0
  • A*算法入门

    A A A 算法的思路可看 xff1a 路径规划之 A A
  • js常见的的6种继承方式

    继承是面向对象的 xff0c 继承可以帮助我们更好的复用以前的代码 xff0c 缩短开发周期 xff0c 提高开发效率 xff1b 继承也常用在前端工程技术库的底层搭建上 xff0c 在整个js的学习中尤为重要 常见的继承方式有以下的六种
  • js中?.、??、??=的用法和含义

    参考链接1 参考链接2 可选链运算符 xff08 xff09 可选链运算符 xff08 xff09 类似于链式运算符 xff08 xff09 xff0c 不同之处在于在引用为null或undefined时不会报错 xff0c 而是短路返回u