aboutsummaryrefslogtreecommitdiff
path: root/files/ru/web/javascript/reference/operators/logical_and_assignment/index.md
blob: 0759ac2a66dc75c14a683d8d9e8be072ddf1fd3e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
---
title: Присваивание логического И (&&=)
slug: Web/JavaScript/Reference/Operators/Logical_AND_assignment
tags:
  - JavaScript
  - Language feature
  - Logical assignment
  - Operator
  - Reference
browser-compat: javascript.operators.logical_and_assignment
---
{{jsSidebar("Operators")}}

Оператор присваивания логического И (`x &&= y`) присваивает значение переменной `x` только в случае, если её текущее значение {{Glossary("truthy", "истиноподобное")}}.

{{EmbedInteractiveExample("pages/js/expressions-logical-and-assignment.html")}}

## Синтаксис

```js
expr1 &&= expr2
```

## Описание

### Сокращённое вычисление

[Логический оператор И](/en-US/docs/Web/JavaScript/Reference/Operators/Logical_AND) вычисляется слева направо, делая возможным сокращённое вычисление выражения, согласно следующему правилу:

`(ложноподобное выражение) && следующее выражение` — вычисление останавливается на ложноподобном выражении;

Сокращённое вычисление хорошо тем, что `следующее выражение` не будет **вычислено**, т.е. всё, связанное с ним, будет проигнорировано (например, если
`следующее выражение` представляет собой вызов функции, то он никогда не произойдёт).

Оператор присваивания логического И также поддерживает сокращённое вычисление, поэтому `x &&= y` по сути то же самое, что и выражение ниже:

```js
x && (x = y);
```

В отличие от следующего примера, где операция присваивания произойдёт вне зависимости от результата вычисления:

```js example-bad
x = x && y;
```

## Примеры

### Использование оператора присваивания логического И

```js
let x = 0;
let y = 1;

x &&= 0; // 0
x &&= 1; // 0
y &&= 1; // 1
y &&= 0; // 0
```

## Спецификации

{{Specifications}}

## Поддержка браузерами

{{Compat}}

## Смотрите также

- [Логическое И (&&)](/en-US/docs/Web/JavaScript/Reference/Operators/Logical_AND)
- [Оператор нулевого слияния (`??`)](/en-US/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing_operator)
- [Присваивание побитового И (`&=`)](/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_AND_assignment)
- {{Glossary("Truthy", "Истиноподобное значение")}}
- {{Glossary("Falsy", "Ложноподобное значение")}}