ES6新增
作用:判断某个属性是否存在
1.常规
// 错误的写法
const firstName = message.body.user.firstName || 'default';
// 正确的写法
const firstName = message?.body?.user?.firstName || 'default';
//下面是判断对象方法是否存在,如果存在就立即执行的例子。
iterator.return?.()
2. ?. 判断某个变量或方法是都定义
//之前
let a=mes.name?mes.name:"哇哈" //同上
//现在
const firstName = message?.body?.user?.firstName || '哇哈';
3. ?? Null判断运算符
//之前
let a=mes.name||"哇哈" //当mes.name 为null或undefiend执行默认操作,但如果mes.name=0或false也会运行
//现在
let a=mes.name??"娃哈"//只有mes.name为null或undefiend执行默认操作
//主要是配合?.使用
let a=mes?.name??"娃哈"//只有mes.name为null或undefiend执行默认操作
?? || && 优先级
//报错
a&&b??res //a和b为null或者undifined 值为res
//正确写法
(a&&b)??res
4.其他运算符
??= ||= &&=
// 或赋值运算符
x ||= y
// 等同于
x || (x = y)
// 与赋值运算符
x &&= y
// 等同于
x && (x = y)
// Null 赋值运算符
x ??= y
// 等同于
x ?? (x = y)
//用法
// 老的写法
user.id = user.id || 1;
// 新的写法
user.id ||= 1;