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

Оператор объединения с нулевым значением позволяет присвоить переменную, если она не является нулем или неопределенным значением, или выражением в противном случае.

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 есть несколько предложений именно по этому оператору:

Если вы заинтересованы во внедрении этого в 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 -> "другое"

Другие вопросы по тегам