?.为可选链式操作符:读取当前对象中的某个属性,找不到该属性返回null或undefined,引用不会报错。
例子
var obj={a: {b:1},b:2}
Console.log(obj?.a?.b) // 1
Console.log(obj?.b?.c) // undefined
??空值合并操作符,当左侧的操作数有值,返回左侧数值;或左侧为null或undefined时,返回其右侧数值。
例子
var obj = {a: {b:1},b:2}
var a = null
let d = a ?? '没有值' // ‘没有值’
Console.log(obj?.a?.c ?? '3') // 3
?:三目运算符:经常用到,性能比较if else运行速度更快,相同的代码,if-else执行的耗时是三目运算符的两倍以上,不做过多赘述。
例子
var a = 1
let b = a ? '2' : '3' // 2