一、可选链操作符?.
let a;
let b = a?.name;
- 如果a没有被声明,则抛出异常
- a存在,同时a具有name属性,才会把值赋给b
- a存在,但没有name属性,或a.name=null或undefined,就把undefined赋值给b.
二、空值合并运算符(??)
let b;
let a = 0;
let c = { name:'buzhimingqianduan' }
b = a ?? c;
//上一句有点类似于: b=a?a:c
- a=undefined或者null, b=c.
- 此外,b=a
- a未定义的话,异常
空值赋值运算符(??=)
当??=左侧的值为null、undefined的时候,才会将右侧变量的值赋值给左侧变量.其他所有值都不会进行赋值.同样在一些场景下,可以省略很多代码.
let b = '你好';
let a = 0
b ??= a;
// b仍然 = “你好”
let c = null;
let d = ’123‘
c ??= d
// c 变成 '123'