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

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
Подписаться
Уведомление о
guest
1 Комментарий
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
yesiaw
yesiaw
2 лет назад

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

const a = 50;
const b = '';

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

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