空值合并操作符(??)
当左侧操作数为null或者undefined时,返回右侧操作数,否则返回左侧操作数
null ?? 5 //5
undefined ?? 5 //5
4 ?? 5 //4
"" ?? 5 //""
空赋值运算符(??=)
当左侧操作数为null或者undefined时,把右侧操作数赋值给左侧变量,否则返回左侧操作数
var a=null
var b=5
a ??= b //a=5
let c=0
c ??= 1 //c=0
可选操作符(?.)
允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效。?. 运算符的功能类似于 . 链式运算符,不同之处在于,在引用为空 (nullish ) (null 或者 undefined) 的情况下不会引起错误,该表达式短路返回值是 undefined。与函数调用一起使用时,如果给定的函数不存在,则返回 undefined。
a?.b // 等同于 a == null ? undefined : a.b
let person = {
name: 'John',
message: {
age: 20,
height: 180,
}
}
let res = person?.mes?.age ?? "age"; // => "age"
let res2 = person?.age; // => undefined
三元运算符
条件 ? 条件为真时要执行的表达式 : 条件为假时要执行的表达式
let a=0
let b=a>0?1:2 //2