Использование двойного знака вопроса (??) и точки вопросительного знака (?.)

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}

рекомендация

отblog.csdn.net/xijinno1/article/details/132095042