1. Doble signo de interrogación (??)
valor1 ?? valor2
?? Tome un valor entre valor1 y valor2, solo tome valor2 cuando valor1 sea nulo o indefinido, de lo contrario tome valor1 (0, falso, "" se considera significativo, así que tome valor1)
const obj = {}
console.log(obj.c ?? 'd') // 'd'
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") // ''
2. Punto de interrogación (?.)
Al acceder a propiedades de objetos multicapa (como res.data.list), si la propiedad res.data está vacía, se informará un error de referencia, por lo que debemos tratarlo de esta manera:
let dataList = res && res.data && res.data.list
Se ve muy feo, la nueva sintaxis introducida hoy es para resolver este problema (¿operador de cadena opcional?).
Con el encadenamiento opcional, puede hacer referencia de manera segura a una propiedad nula o indefinida:
let dataList = res?.data?.list
La función es juzgar si (longitud) bajo (valor) bajo (businessObject) bajo este objeto (this.element) es nulo o indefinido, y devolver indefinido cuando uno de los enlaces es nulo o indefinido, de modo que incluso si hay un atributo faltante en el medio No se informará ningún error, y el valor predeterminado es seguido por el doble signo de interrogación.
Ejemplo 1 :
var 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) // 报错
Ejemplo 2 :
var obj={a:{b:1}}
console.log(obj.a.b) // 1
console.log(obj ?. a ?. b ?? 66) // 1
console.log(obj ?. a ?. c ?? 66) // 66
console.log(obj) // {a:{b:1}}
console.log(obj.a) // {b:1}