Есть ли обратное логическое нулевое присвоение?

Так что ??= Оператор присваивает значение переменной только в том случае, если текущее сохраненное значение равно нулю.

Может быть, мне не хватает очевидного, но я не могу придумать удобного решения (без операторов if), которое можно было бы назначать только в том случае, если значение не равно нулю ?

Я использую nodeJS, чтобы дать немного больше контекста .


я хочу

      let x r??= 2;
// Updates 'x' to hold this new value
x r??= undefined;
// Has no effect, since the value to assign is nullish
console.log(x); // 2

ИЗМЕНИТЬ, чтобы прояснить мою проблему:

Я хочу, чтобы переменной присваивалось только новое значение , если это новое значение не является нулевым.

      let iceCream = {
    flavor: 'chocolate'
}

const foo = 2.5
const bar = undefined;

iceCream.price r??= bar
// does not assign the new value because it is nullish
console.log(iceCream.price) // expected to be error, no such property

iceCream.price r??= foo
// assigns the new value because it is not nullish but a float
console.log(iceCream.price) // expected to be 2.5

iceCream.price r??= bar
// does not assign the new value because it is nullish
console.log(iceCream.price) // expected to still be 2.5

3 ответа

Нет, это не один оператор. Наиболее близкими являются два оператора:

      x = undefined ?? x;

Добавление еще одного ответа после уточнения, поскольку редактирование моего предыдущего казалось странным.

Самый простой способ, которым я могу придумать решение без if, выглядит следующим образом:

      let iceCream = {
    flavor: 'chocolate'
}

const foo = 2.5
const bar = undefined;
bar && (iceCream.price = bar)
// Another possible solution if creating the property with a nullish value is ok for you:
iceCream.price = bar || iceCream.price;

Вы можете использовать логическое И присваивание .

Из веб-документов MDN:

      let a = 1;
let b = 0;

a &&= 2;
console.log(a);
// expected output: 2

b &&= 2;
console.log(b);
// expected output: 0
Другие вопросы по тегам