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