Напротив нулевого оператора объединения
Оператор объединения с нулевым значением позволяет присвоить переменную, если она не является нулем или неопределенным значением, или выражением в противном случае.
a = b ?? other
Это улучшение по сравнению с ранее использовавшимися ||
так как ||
также назначит другое, если b является пустой строкой или другим ложным, но не нулевым значением.
Однако иногда мы также используем &&
для присвоения значений, например
a = b && func(b)
где мы хотим выполнить func на b, только если он не нулевой, в противном случае присваиваем нулевому b.
Конечно, &&
проверяет на ложность, а не на ничтожность. Есть ли ничтожная версия&&
?
7 ответов
Насколько мне известно, такого оператора нет, а также нет предложений добавить его. Вместо этого вы можете полагаться на стандартный способ проверки нулевых значений:b == null
a = b == null ? b : func(b)
Это не ответит на вопрос, поскольку на него уже ответил @str, я просто публикую это здесь, потому что у меня недостаточно представителей, чтобы прокомментировать ответ @Dalou, и я не хочу, чтобы люди спотыкались об этом ответе.
a = (b ?? false) && other
Не является противоположностью, поскольку будет принимать значение if является ложным значением, отличным от undefined / null, например, или. Противоположно
??
должен установить
a
к стоимости
other
даже если
b
является
''
или же
0
.
Как уже отмечали другие, в настоящее время такого оператора нет. Однако в официальной дискуссионной группе TC39 есть несколько предложений именно по этому оператору:
- Оператор «может быть» для дополнения ?? оператор
- Необязательный оператор проекции/выражения — например, maybeNullish ?::transform(maybeNullish)
- [синтаксис] Обратный оператор объединения нулей
Если вы заинтересованы во внедрении этого в ECMA, это может быть хорошей отправной точкой.
ОТВЕЧАТЬ:
let a = 9;
if( a!==null || a!==undefined ){ /* actions */ };
if( (a??null) !== null ){ /* actions */ }
ПРЕДЛОЖЕНИЕ:
const oo = console.log;
let a; // undefined, null
// Syntax proposal: !?
a !? oo('NOT Nullish coalescing operator');
// Logical NOT Nullish assignment:
let a = 7;
a !?= 5;
oo(a); // 5
let b, c = null;
b !?= 3;
oo(b); // undefined
c !?= 8;
oo(c); // null
Рабочий пример для проверки обратного нулевого коалесценции
a = (b ?? false) && other
Я только сегодня нашел этот пост и решил добавить к нему несколько слов.
Хотя в предложении присутствует обратный оператор объединения нулей :
a = b !? func(b)
Я не думаю, что это предложение будет реализовано и является обязательной функцией, поскольку мы можем просто получить желаемое поведение с помощью&&
и||
операторы. Добавление??
является специальной функцией и является обязательной функцией. Это только мое мнение.
Я не думаю, что нам следует ждать, а просто использовать вроде:
a = func(b??false)
Нам просто нужно проявить творческий подход! Я использовал здесь нулевой оператор объединения непосредственно внутри вызова функции, чтобы избежать необходимости инвертировать его, например:
a = b != null && func(b) or so on
Итак, я полагаю, что иметь!?
совершенно ненужно. Нам просто нужно подумать об этом правильно.
«Что-то не равное нулю, тогда оно должно быть» можно просто обозначить с помощью оператора объединения с нулевым значением: (HAVE_IT ?? false) || (HAVE_IT ?? 0) || (HAVE_IT ?? НИЧЕГО_YOU_WANT_EXCEPT_NULL).
Мне это не нравится, но вот мое решение:
output = typeof input === 'boolean' && "other"
Таблица истинности:
ввод -> вывод
нуль -> ложь
undefined -> ложь
true -> "другое"
false -> "другое"