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;
