?.和??运算符
??运算符:等同于||运算符(但是会默认忽略0和空字符串为真)
console.log('aa' || 22); //'aa'
console.log(2 || 'aa'); //2
console.log(33 || 'aa'); //33
console.log(undefined || 'aa'); //'aa'
console.log(0 || -1); //-1
console.log('aa' ?? 33); // 'aa'
console.log(0 ?? 22); //0
console.log("" ?? -1); //"" 默认忽略0和空字符串
console.log(null ?? 'aa'); //aa
?.运算符:等同于&&运算符(obj.name?.a?.c 当其中一链为null或者undefined时就返回undefined,这样即使中间缺少一个属性也不会报错。)
const obj = {name: '小明',age: 18};
// console.log(obj.name.a.c && obj.name); //会报错
console.log(obj.age && obj.name); // 小明(显示最后条件成立的)
console.log(obj.name?.a?.c); //undefined
console.log(obj.name.c); //undefined
console.log(obj.name.c.d); //报错
只要思想不滑坡,办法总比困难多!