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

Программисты стремятся не содержать ошибок в своих программах. JavaScript особенно имеет много особенностей, подверженных ошибкам, которые все еще исправляются, исправляются и обновляются. Новым инструментом для JavaScript является Nullish coalescing operator, который обеспечивает более явный способ работы со значениями по умолчанию.

Часто бывают случаи, когда переменную необходимо передать через функцию, но должно быть значение по умолчанию, присвоенное переменной в том случае, если программа изначально предоставляет ложное значение. Традиционно это часто достигалось с помощью оператора Logical OR (||), который оценивает два операнда, возвращает первый операнд, если он истинный, и в противном случае, если первый операнд ложный, возвращает второй операнд. Например:

let value = 'Liar Liar'
console.log(value || 'Ace Ventura: Pet Detective')
//=> Liar Liar
// value is truthy, so the first operand is printed
////////////////////////////////////////////////////////////////////
let value
console.log(value || 'The Mask')
//=> The Mask
// value is falsy, because it is undefined
// so the second operand is printed

Это нормально, но могут произойти непредвиденные результаты, если вы намереваетесь использовать ложное значение.

let brainCells = 0
let lloyd = 'Lloyd Christmas'
function cellCount(name, brainCells) {
  console.log(`${lloyd} has ${brainCells || 'no'} brain cells.`)
}
cellCount(lloyd, brainCells)
//=> Lloyd Christmas has no brain cells.

Хотя распечатка все еще актуальна, предполагаемый результат был Lloyd Christmas has 0 brain cells.. Хотя число 0 должно было отображаться, оператор Logical OR посчитал его ложным и предложил значение по умолчанию no. Введите Nullish coalescing operator, синтаксически представленный как ??, который ведет себя так же, как оператор Logical OR, за исключением того, что он только будет рассматривать первый операнд как ложный, если он оценивается как null или undefined.

let brainCells = 0
let harry = 'Harry Dunne'
function cellCount(name, brainCells) {
  console.log(`${harry} has ${brainCells ?? 'no'} brain cells.`)
}
cellCount(harry, brainCells)
//=> Harry Dunne has 0 brain cells.

В случае Гарри Nullish coalescing operator напечатал 0, как и предполагалось, потому что, хотя 0 является ложным значением, оно не было явно нулевым или неопределенным. Так что, думаю, Гарри немного умнее. Когда-нибудь так немного ...

Оператор объединения Nullish может быть весьма полезен при доступе к свойствам Object. Это делается очень часто, причем с непредсказуемыми данными. Реальное приложение будет иметь доступ к свойствам Object, созданного на основе ответа JSON. Возможно, программа извлекает данные из API, и значения свойств должны быть специфичными для источника, за исключением только, если null или undefined. Вот грубый пример:

const response = {
  data: {
    name: 'Fletcher Reede',
    occupation: null,
    gags: 'The Claw',
    lies: 0
  }
}
const name = response.data.name ?? 'No name'
const job = response.data.occupation ?? 'Lawyer'
const gags = response.data.gags ?? 'Lying'
const lies = response.data.lies ?? 'Too many to count'
console.log(name)
console.log(job)
console.log(gags)
console.log(lies)
//=>
  Fletcher Reede
  Lawyer
  The Claw
  0

Из всех новых обновлений и усовершенствований ECMAScript (JavaScript) Nullish coalescing operator может показаться немного простым и бесценным, но на самом деле это отличное дополнение к набору инструментов программиста. Любая строка кода, которую можно оптимизировать и улучшить, сделав ее более явной, будет в значительной степени способствовать созданию чистого, эффективного и предсказуемого кода. Настоящему мастеру работа дается легко, потому что он всегда использует правильный инструмент для работы.

Github.com/dangrammer
connected.com/in/danieljromans
danromans.com