JavaScript中的??和?.和??=操作符
JS中两种不常使用但挺实用的操作符:??和?.
一起来了解并学会使用它们吧:
空值合并操作符:??
只有当操作符左侧为null或undefined时才会返回操作符右侧的值,否则返回左侧的值。
eg:
null ?? 'hello';// hello
undefined ?? 'hello';// hello
false ?? 'hello';// false
null ?? undefined;// undefined
null ?? undefined ?? 123;// 123
可以用于程序中当某个值为null或undefined时给它赋默认值。
if表达式或者逻辑或||操作符也能实现这个赋默认值,区别于逻辑或操作符的是:逻辑或是当操作符左侧为假值(null、undefined、false、0、''等等)时返回操作符右侧的值,否则返回左侧的值
null || 'hello';// hello
false || 'hello';// hello
0 || 'hello';// hello
true || 'hello';// true
空值赋值操作符:??=
x ??= y等价于x = (x ?? y)
var x = undefined;
var y = 1;
x ??= y;// 1
可选链操作符:?.
var obj = {};console.log(obj.name.firstName);
这个情况下会出现报错:

这是程序中经常会遇见的报错,通常会在上面加一层if判断或者使用&&与操作符来处理这种异常
现在可以使用?.操作符来处理
var obj = {};console.log(obj.name?.firstName);// undefined
可选链?.操作符用于读取链中的属性值,而不必明确每个值都有效,区别于(.)操作符加了一层异常的处理,避免程序的报错和表达式的执行短路。
函数调用:obj.fn?.();// undefined
两个操作符结合使用:
var obj = {};
obj.name = obj?.name?.firstName ?? {firstName: 'hello', lastName: 'world'};
obj;// {name: {firstName: 'hello', lastName: 'world'}}
JavaScript中的??和?.和??=操作符的更多相关文章
- javascript中的递增递减操作符
javascript中递增递减属于一元操作符,所谓一元操作符,即只能操作一个值的操作符. 递增和递减操作符各有两个版本:前置型和后置型.顾名思义,前置型应该位于要操作的变量之前,而后置型应该位于要操作 ...
- javascript中!=、!==、==、===操作符总结
JavaScript 有两种比较方式:严格比较运算符和转换类型比较运算符. 在相等运算符中对应 === .!==和 ==.!=. 先举个栗子 var str = '1' var num0 = 0 va ...
- Javascript中void操作符
Javascript中void是一个操作符,该操作符指定要计算一个表达式但是不返回值. void操作符用法格式如下:1.javascript:void (expression)2.javascript ...
- 为什么不要在 JavaScript 中使用位操作符?
如果你的第一门编程语言不是 JavaScript,而是 C++ 或 Java,那么一开始你大概会看不惯 JavaScript 的数字类型.在 JavaScript 中的数字类型是不区分什么 Int,F ...
- JavaScript中“javascript:void(0) ”是什么意思
来源: <a href="javascript:test();void(0);">here</a> 此处:Javascript中void是一个操作符,该操作 ...
- 看看JavaScript中void(0)的含义
JavaScript中void是一个操作符,该操作符指定要计算一个表达式但是不返回值. void 操作符用法格式如下:1. javascript:void (expression)2. javascr ...
- javascript中的操作符详解1
好久没有写点什么了,根据博主的技术,仍然写一点javascript新手入门文章,接下来我们一起来探讨javascript的操作符. 一.前言 javascript中有许多操作符,但是许多初学者并不理解 ...
- JavaScript中in操作符(for..in)、Object.keys()和Object.getOwnPropertyNames()的区别
ECMAScript将对象的属性分为两种:数据属性和访问器属性.每一种属性内部都有一些特性,这里我们只关注对象属性的[[Enumerable]]特征,它表示是否通过 for-in 循环返回属性,也可以 ...
- javascript 中的new操作符的理解
new 操作符 在有上面的基础概念的介绍之后,在加上new操作符,我们就能完成传统面向对象的class + new的方式创建对象,在Javascript中,我们将这类方式成为Pseudoclassic ...
随机推荐
- 通过面试题学JavaScript知识(1)
// a 是多少的时候 可以让下面的打印ok if(a == 1 && a == 2 && a ==3){ console.log('ok') } 分析1: == 比较 ...
- css3属性之filter初探
filter属性是css不常用的一个属性,但是用好了可以给网页增色不少!ps: IE不支持此属性: img { -webkit-filter: grayscale(100%); /* Chrome, ...
- Java安全之Commons Collections6分析
Java安全之Commons Collections6分析 0x00 前言 其实在分析的几条链中都大致相同,都是基于前面一些链的变形,在本文的CC6链中,就和前面的有点小小的区别.在CC6链中也和CC ...
- YOLO系列梳理(一)YOLOv1-YOLOv3
前言 本文是YOLO系列专栏的第一篇,该专栏将会介绍YOLO系列文章的算法原理.代码解析.模型部署等一系列内容.本文系公众号读者投稿,欢迎想写任何系列文章的读者给我们投稿,共同打造一个计算机视觉技 ...
- ZABBIX Proxy容器启动的配置过程
ZABBIX Proxy容器启动的配置过程 环境介绍 版本 zabbix6 zabbix server 与 zabbix proxy 非同一台主机,zabbix proxy为主动方式提交给server ...
- 算法基础⑧搜索与图论--dijkstra(迪杰斯特拉)算法求单源汇最短路的最短路径
单源最短路 所有边权都是正数 朴素Dijkstra算法(稠密图) #include<cstdio> #include<cstring> #include<iostream ...
- TexFormula2Word: 将Latex公式转换为MathML的Chrome扩展
前言 因为学校要求对毕业论文进行格式检查,而格式检查又必须上传Word文件,这就导致只能使用Word写毕业论文.但Word公式输入实在是太难用,加之我在小论文中已经用Latex写过大部分公式,所以就希 ...
- Python装饰器:套层壳我变得更强了
Python装饰器:套层壳我变得更强了 Python装饰器:套层壳我变得更强了 关于作用域和闭包可以聊点什么? 什么是作用域 什么是闭包 装饰器:套层壳我变得更强了 参考资料 昨天阅读了<Pyt ...
- Odoo 服务器搭建备忘
前提 OS:Ubuntu 20.04LTS Odoo:14旗舰版 数据库:Postgres13.0 *数据库和Odoo安装在一台服务器 系统设置 为了Log日志时间好看,进行系统时区设置 # 查看可用 ...
- PicLite 开发日志 (v0.0.3)
PicLite 开发日志 (v0.0.3) 感谢您阅读本片文章! Gitee 地址:https://gitee.com/XiaoQuQuSD/pic-lite. 新增功能 当错误出现时不再强制 rai ...