1. Двойной вопросительный знак (??)
значение1 ?? значение2
??Возьмите значение между значением1 и значением2, возьмите значение2, только если значение1 равно нулю или не определено, в противном случае возьмите значение1 (0, false, "" считается значимым, поэтому возьмите значение1)
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. Вопросительный знак (?.)
При доступе к многоуровневым свойствам объекта (таким как res.data.list), если свойство res.data пусто, будет сообщено об ошибке ссылки, поэтому мы должны справиться с этим следующим образом:
пусть dataList = res && res.data && res.data.list
Это выглядит очень некрасиво, новый синтаксис, введенный сегодня, должен решить эту проблему (необязательный оператор цепочки?.)
С необязательной цепочкой вы можете безопасно ссылаться на нулевое или неопределенное свойство:
пусть dataList = res?.data?.list
Функция состоит в том, чтобы оценить, является ли (длина) под (значением) под (бизнес-объектом) в этом объекте (this.element) нулевым или неопределенным, и вернуть неопределенное значение, когда одна из ссылок является нулевой или неопределенной, так что даже если есть отсутствует атрибут посередине. Об ошибке не сообщается, а за значением по умолчанию следует двойной вопросительный знак.
Пример 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) // 报错
Пример 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}