Необязательный оператор цепочки ?
При обработке вложенного объекта обычно возникает ошибка, если свойство не добавлено. Необязательный оператор цепочки позволяет использовать для проверки глубоко расположенного свойства без необходимости проверять, действительна ли каждая цепочка. Это похоже на оператор ., за исключением того, что вместо того, чтобы вызывать ошибку, он возвращает undefined . При вызовах функции он возвращает undefined, если ссылка на функцию не найдена.

const dataObj = {
    name: "Brad",
    details: { 
        country: "USA",
        city: "New york",
        contactsInfo: {
            mobile: 123,
            email: "xyz@gmailcom"
                      }
          }
     }
console.log(dataObj?.details?.country);
// USA
console.log(dataObj?.details?.university);
// undefined
/**Accessing methods*/
console.log(dataObj?.name?.pop())
// undefined

Вместо того, чтобы выдавать ошибку при использовании метода pop() в строке, этот оператор обработает ошибку и вернет undefined. Этот оператор полезен, если вы обращаетесь к динамическому значению без необходимости проверять его тип.

Нулевой оператор объединения

Оператор ?? является логическим оператором, аналогичным оператору || логического ИЛИ. Оператор логического ИЛИ возвращает свое правое значение, если левый оператор имеет ложное значение '' | false | undefined | 0, тогда как оператор ?? возвращает правое значение, только если левая переменная имеет null | undefined. Этот оператор будет очень полезен при присвоении значения по умолчанию / возвращаемого значения, если ожидаемый результат null | undefined.

const x  = 0 || 42
// 42
const x = 0 ?? 42
// 0
?? operator only looks for null or undefined type 
const obj = {}
obj.name = obj.name ?? 'Brad'
console.log(obj.name)
// Brad

Нулевое объединение / Оператор логического присваивания

Оператор ??= аналогичен оператору объединения с нулевым значением, кроме того, он может использоваться для присвоения значения свойству или переменной, если результат равен null |undefined. Изначально синтаксис может сбивать с толку, лучше оставить комментарий, чтобы другие сначала поняли.

const obj =  {}
obj.name = obj.name ?? "Shelby"
// console.log(obj.name) 
// Shelby
/** Short hand for the above will be */
obj.name ??= "Shelby"
console.log(obj.name)
// Shelby

Тернарный оператор

Оператор ?: может использоваться как сокращение для оператора if..else, если блок кода является простым и однострочным. Можно использовать вложенный тернарный оператор, но это снизит читабельность кода.

const name ="John"
if(name){
console.log(name)
}
else {
console.log("Name not added")
}
//Short-hand expression
name ? console.log(name) : console.log("Name not added")
// John

Оператор-запятая

Оператор , вписывается в набор операторов выражений и может быть полезен, но имеет тенденцию использоваться таким образом, чтобы запутать, а не прояснить. Частично причина этого в том, что это запятая, а запятые имеют другое значение в JavaScript. Итак, чтобы быть на 100% ясным, запятая - это только оператор запятой, когда он действует с двумя выражениями:

левое выражение, правое выражение

Он используется для последовательного выполнения двух выражений. Он сначала оценивает каждый из своих операндов слева направо, а затем в качестве результата возвращается значение последнего операнда.

const num = (20, 30);
console.log(num);
// 30
const data =  num ? (num,num*20) : num
console.log(num)
// 600

В этом случае оператор запятой используется для выполнения выражения, в котором num умножается и возвращается.

Ссылки



Https://github.com/microsoft/TypeScript/issues/37255