||
短路或 当左侧值转换成布尔类型为 false 时,返回右侧的值
* 常用于 es5 设置默认值
console.log(0 || 100); // 100
console.log(false || 100); // 100
console.log(null || 100); // 100
console.log(undefined || 100); // 100
??
空值合并 当左侧值为 null 或 undefined 时,返回右侧的值
* 只针对 null 和 undefined
console.log(0 ?? 100); // 0
console.log(false ?? 100); // false
console.log(null ?? 100); // 100
console.log(undefined ?? 100); // 100
?.
可选链 如果对象/数组存在属性或方法可执行,则继续执行,否则返回 undefined
* 常用于属性判断,可以避免类型错误导致报错阻塞
* 适量使用,不可滥用
obj?.prop / obj?.[expr]
**_desc_**
对象属性可选链_**params**_
{ any } obj_**params**_
{ string } prop 静态属性名称_**params**_
{ string } expr 动态属性名称_**return**_
{ any | undefined }
var obj;
console.log(obj?.name); // undefined
console.log(obj.name); // TypeError: Cannot read property "name" of undefined
arr?.[index]
**_desc_**
数组可选链_**params**_
{ any } arr_**params**_
{ number } index_**return**_
{ any | undefined }
var arr;
console.log(arr?.[0]); // undefined
console.log(arr[0]); // TypeError: Cannot read property "0" of undefined
func?.(args)
**_desc_**
函数可选链_**params**_
{ any } func_**params**_
{ any } args_**return**_
{ any | undefined }
var func;
console.log(func?.()); // undefined
console.log(func()); // TypeError: func is not a function