1、逻辑或运算符(||)
value1 || value2
||
在value1和value2之间,当value1为null、
undefined
、0
、false
、""
时取value2,否则取value1
null || 1 // 1
0 || '1' //'1'
undefined || true //true
false || 1 // 1
'' || 1 // 1
[] || 1 // []
{} || 1 // {}
2、问号点(?.)
value1 ?. value2 ?. value3
?.作用在于,判断某个对象下是否有链式中的属性,当其中一链为null
或者undefined时,整个链就返回undefined
let obj ={}
console.log(obj ?. a ?. b) // undefined
console.log(obj ?. a ?. b ?? 88 ) // 88
console.log(obj) // Object
console.log(obj.a) // undefined
console.log(obj.a.b) // 报错
let obj={a:{b:1}}
console.log(obj ?. a ?. b) // 1
console.log(obj ?. a ?. b ?? 66) // 1
console.log(obj) // {a:{b:1}}
console.log(obj.a) // {b:1}
console.log(obj.a.b)// 1
3、双问号(??)
value1 ?? value2
??
在value1和value2之间,只有当value1为null、
undefined
时取value2,否则取value
const obj = {}
const c_or_d = obj.c ?? 'd'
console.log(c_or_d) // 'd'
console.log(1 || "xx") //1
console.log(0 || "xx") //xx
console.log(null || "xx") //xx
console.log(undefined || "xx") //xx
console.log(-1 || "xx") //-1
console.log("" || "xx") //xx
console.log(1 ?? "xx") //1
console.log(0 ?? "xx") //0
console.log(null ?? "xx") //xx
console.log(undefined ?? "xx") //xx
console.log(-1 ?? "xx") //-1
console.log("" ?? "xx") //''