-
空值合并运算符(??)
如果第一个参数不是 null/undefined,则 ?? 返回第一个参数。否则,返回第二个参数。
let a;
let b = 1;
let result = a ?? b; // 同 (a !== null && a !== undefined) ? a : b;
console.log(result) // 1
-
可选链(?.)
可选链 ?. 不是一个运算符,而是一个特殊的语法结构。它还可以与函数和方括号一起使用 ?.() ?.[]
let user = {}
console.log(user.address) //undefined
console.log(user.address.street) // 会报错找不到street
console.log(user.address?.street) // undefined
let userAdmin = {
admin() {
alert("I am admin");
}
};
let userGuest = {};
userAdmin.admin?.(); // I am admin
userGuest.admin?.(); // 啥都没发生(没有这样的方法)
/**
* 如果 admin 函数存在,那么就调用运行它(对于 userAdmin)。否则(对于 userGuest)运算停止,没有报错
**/
注意:可选链操作符只能在运行时检查对象是否为 null 或 undefined ,并在对象为 null 或 undefined 时返回 undefined,而不会报错。它不会处理其他类型的错误,例如属性名拼写错误等。因此,在使用可选链操作符时仍然需要注意对象的属性和方法是否存在的问题。同时,可选链操作符目前尚未得到所有JavaScript引擎的完全支持,因此在使用时需要谨慎考虑兼容性问题。