JavaScript

Операторы логического присваивания

Spread the love

Перевод: Aaron GoldsmithLogical Assignment Operators

Javascript (ES2021) теперь поддерживает возможность комбинировать логические операции и операцию присваивания с помощью новых операторов &&=, ||= и ??=. Ранее составные операторы присваивания были возможны только с математическими и побитовыми операциями.

Логическое И присваивание &&=

Оператор логического И (AND) присваивания x &&= y выполняет присваивание, только если x истинно. Например:

let a = 1;
let b = 0;

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

b &&= 2;
console.log(b); // output: 0

Если левое выражение является ложным, то правое выражение не оценивается, поэтому значение b не переопределено, так как 0 является ложным.

a &&= 2 эквивалентно a && (a = 2), значение a переназначено, потому что оно изначально было истинным.

Логическое ИЛИ присваивание ||=

Оператор логического ИЛИ (OR) x ||= y присваивает, только если x является ложным.

const a = 50;
const b = '';

a ||= 10;
console.log(a);  // output: 50

b ||= 'string is empty.';
console.log(b); // output: "string is empty."

В приведенном выше примере a ||= 10 эквивалентно a || (a = 10), но поскольку значение a истинно, то правое значение не будет присвоено левому оператору

Если вы делаете проверку на ложное значение, таких типов данных как пустая строка или 0, необходимо использовать ||=, в противном случае для проверки значений null или undefined  следует использовать логический оператор ?? =.

Логическое нулевое присвоение ??=

Оператор логического нулевого присваивания x ?? = y назначает, только если x имеет значение null или undefined.

const a = { limt: 50 };

a.limit ??= 10;
console.log(a.limit); // output: 50

a.speed ??= 25;
console.log(a.speed); // output: 25

Логическое нулевое выражение переназначает левое выражение, если левая часть является null , или undefined.

В приведенном выше примере переназначение a.limit не выполняется, потому что его значение определено как 50, что не является null или undefined.

Но a.speed первоначально будет иметь значение undefined, поэтому оценивается правое выражение, которое эквивалентно a.speed = 25, то есть конечный результат будет a = {limit: 50, speed: 25}.

Была ли вам полезна эта статья?
[14 / 5]

Spread the love
Editorial Team

View Comments

  • Интересное присвоение, когда переменная является константой...

    const a = 50;
    const b = '';
    
    a ||= 10;
    console.log(a);  // output: 50
    
    b ||= 'string is empty.'; - ERROR
    console.log(b); // output: "string is empty."
    

Recent Posts

Vue 3.4 Новая механика v-model компонента

Краткий перевод: https://vuejs.org/guide/components/v-model.html Основное использование​ v-model используется для реализации двусторонней привязки в компоненте. Начиная с Vue…

11 месяцев ago

Анонс Vue 3.4

Сегодня мы рады объявить о выпуске Vue 3.4 «🏀 Slam Dunk»! Этот выпуск включает в…

11 месяцев ago

Как принудительно пере-отобразить (re-render) компонент Vue

Vue.js — это универсальный и адаптируемый фреймворк. Благодаря своей отличительной архитектуре и системе реактивности Vue…

2 года ago

Проблемы с установкой сертификата на nginix

Недавно, у меня истек сертификат и пришлось заказывать новый и затем устанавливать на хостинг с…

2 года ago

Введение в JavaScript Temporal API

Каким бы ни было ваше мнение о JavaScript, но всем известно, что работа с датами…

2 года ago

Когда и как выбирать между медиа запросами и контейнерными запросами

Все, кто следит за последними событиями в мире адаптивного дизайна, согласятся, что введение контейнерных запросов…

2 года ago