1.可选链(?.)
/*只有当a存在,同时a具有name属性的时候,才会把值赋给b,否则就会将undefined赋值给b.重要的是,不管a存在与否,这么做都不会报错.*/let a;let b = a?.name;//undefinedconst arr = [{ name: "ww" }, { name: "qq" }];console.log(arr?.[0]);// {name: 'ww'}
2.空值合并运算符(??)
let a = null;let c = { name: 'ww' };let b = a ?? c;// {name: 'ww'}//如果a等于null或者undefined,那么b=c,否则b=a
3.空值赋值运算符(??=)
/*当??=左侧的值为null、undefined的时候,才会将右侧赋值给左侧,否则不改变原来的值*/let b = 'hello';let a = 0;let c = undefined; let d = nullconsole.log(b ??= a);//helloconsole.log(c ??= d);//null
4.逻辑或赋值 (x ||= y)
/*
运算符仅在 x 为假时才赋值。
*/const obj = {name: '',age: 0
}obj.name ||= 'fatfish'
obj.age ||= 100console.log(obj.name, obj.age) // fatfish 100
5.逻辑与赋值(&&=)
/*
逻辑与赋值 (x &&= y) 运算符仅在 x 为真时才赋值。与逻辑或赋值 (||=) 相反,只有 x 为真时才会正确赋值。*/const obj = {name: 'fatfish',age: 100
}obj.name &&= 'medium' // medium
obj.age &&= 1000 // 1000
console.log(obj.name, obj.age) // medium 1000