?? - 空值合并操作符
结构:eg: let res = num01??num02;
?? 当左侧的变量为null或undefined的时,返回左侧num02否则返回自身num01(num01相当于null和undefined下兜底作用)
let res01 = null ?? "B站"; // 'B站'
let res02 = undefined ?? "P站"; // 'P站'
let res03 = "P站" ?? "B站"; // 'P站'
?. - 可选链操作符
结构:eg: obj.userInfo?.name;
?. 当访问链深处属性值的时候不必明确验证链中所方法对象的有效性
使用场景
场景01 - 可选链与函数调用
let result = someInterface.customMethod?.();
注:如果存在一个属性名且不是函数, 使用 ?. 仍然会产生一个 TypeError 异常 (x.y is not a function).
场景02 - 使用空值合并操作符
let customer = {
name: "Carl",
details: { age: 82 }
};
let customerCity = customer?.city ?? "P站";
console.log(customerCity); // “P站”
场景03 - 短路计算
···
let a = null;
let x = 0;
let prop = a?.[x++];
console.log(x); // x 将不会被递增,依旧输出 0
···