当前位置:网站首页>JS中? ?和??=和?.和 ||的区别
JS中? ?和??=和?.和 ||的区别
2022-07-30 23:09:00 【asdfsdgfsdgfa】
undefined和null是两个比较特殊的数据类型,是不能用点操作符去访问属性的,否则将会报错
let a;
console.log(a?.name); //undefined
console.log(a.name); //报错 
let obj = {};
console.log(obj.name); //undefined
console.log(obj?.name?.a); //undefined
console.log(obj.name.a); //报错
?? 与 || 的区别
相同点:
?? 和 || 的用法相同,都是前后是值,中间用符号连接,根据前面的值来判断最终是返回前面的值还是后面的值。
A ?? B
A || B
不同点:
判断的方法不同:
使用 ?? 时,只有A为 null 或者 undefined 时才会返回 B;
使用 || 时,A会先转化为布尔值判断,为true时返回A , false 返回B
// ??
console.log(undefined ?? 2); // 2
console.log(null ?? 2); // 2
console.log(0 ?? 2); // 0
console.log("" ?? 2); // ''
console.log(true ?? 2); // true
console.log(false ?? 2); // false
// ||
console.log(undefined || 2); // 2
console.log(null || 2); // 2
console.log(0 || 2); // 2
console.log("" || 2); // 2
console.log(true || 2); // true
console.log(false || 2); // 2空值合并操作符 ??
只有当左侧为null 或者undefined 时,才会返回右侧的值
可选链操作符 ?.
?. 允许读取连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效。
?. 操作符的功能类似于. 链操作符,不同之处在于,在引用为空,即 null 或者 undefined 的情况下不会引起错误,该表达式短路返回值。
const obj = { a: { b: [{ name: "obj" }] } };
// 原本的写法
console.log(obj && obj.a && obj.a.b.length && obj.a.b[0].name); //obj
// 可选链写法
console.log(obj?.a?.b?.[0]?.name); // obj
console.log(obj?.b?.c?.d); // undefined?.可以和 ?? 运算符结合使用
const obj = { a: { name: "obj" } };
console.log(obj?.a?.b ?? "hello world"); // hello world空值赋值运算符(??=)
当??=左侧的值为null、undefined的时候,才会将右侧变量的值赋值给左侧变量.其他所有值都不会进行赋值
let a = "你好";
let b = null;
let c = undefined;
let d = 0;
let e = "";
let f = true;
let g = false;
console.log((b ??= a)); // 你好
console.log((c ??= a)); // 你好
console.log((d ??= a)); // 0
console.log((e ??= a)); // ''
console.log((f ??= a)); // true
console.log((g ??= a)); // false
console.log(b); // 你好
console.log(c); // 你好
console.log(d); // 0
console.log(e); // ''
console.log(f); // true
console.log(g); // false边栏推荐
- 抽象类和接口(学习笔记)
- Apache Doris系列之:安装与部署详细步骤
- [0x800706D9] solution appears in Microsoft Store
- Abstract classes and interfaces (study notes)
- mysql获取当前时间
- 通过对抗性知识蒸馏压缩深度图神经网络
- The problem of sticky packets in tcp protocol transmission
- 微软商店出现【0x800706D9】解决方法
- 2022.7.30
- Debezium报错系列之二十:task failed to create new topic.Ensure that the task is authorized to create topics
猜你喜欢

Apache Doris series: detailed steps for installation and deployment

【LeetCode】64. 最小路径和 - Go 语言题解
![[0x800706D9] solution appears in Microsoft Store](/img/f2/7485cd55fd260220378acd485d8dc9.png)
[0x800706D9] solution appears in Microsoft Store

只会纯硬件,让我有点慌

可视化工具Netron介绍

2sk2225代换3A/1500V中文资料【PDF数据手册】

$\text{ARC 145}$

EasyExcel comprehensive course combat
![[MySQL] Related operations on databases and tables in MySQL](/img/a5/c92e0404c6a970a62595bc7a3b68cd.gif)
[MySQL] Related operations on databases and tables in MySQL

Mysql进阶优化篇01——四万字详解数据库性能分析工具(深入、全面、详细,收藏备用)
随机推荐
Calico 网络通信原理揭秘
Ningbo Zhongning Pawn will transfer 29.5% of the equity for 2.8338 million yuan, and the owner's equity in 2021 will be 9.6875 million yuan
ZZULIOJ: 1120: the most value to exchange
微软商店出现【0x800706D9】解决方法
[0x800706D9] solution appears in Microsoft Store
第一节 zadig 入门
2022中国物流产业大会暨企业家高峰论坛在杭州举办!
一文详解:SRv6 Policy模型、算路及引流
"NIO Cup" 2022 Nioke Summer Multi-School Training Camp 2 H.Take the Elevator
PyTorch model export to ONNX file example (LeNet-5)
2022.7.27
el-upload添加请求头
IDEA usage skills
[SAM模板题] P3975 [TJOI2015] 弦论
【2022-05-31】JS逆向之易企秀
科技的成就(三十一)
# Dasctf 7月赋能赛 WP
PS基础学习(一)
ThinkPHP high imitation blue play cloud network disk system source code / docking easy payment system program
2021GDCPC广东省大学生程序设计竞赛 H.History