aboutsummaryrefslogtreecommitdiff
path: root/files/ja/web/javascript/reference/operators/logical_and_assignment/index.md
blob: d185cedff85448a15b9b993bd0cde688dc781835 (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
  - 言語機能
  - 論理代入
  - 演算子
  - Reference
browser-compat: javascript.operators.logical_and_assignment
translation_of: Web/JavaScript/Reference/Operators/Logical_AND_assignment
---
{{jsSidebar("Operators")}}

論理積代入 (`x &&= y`) 演算子は、`x` が{{Glossary("truthy", "真値")}}である場合にのみ代入を行います。

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

## 構文

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

## 解説

### 短絡評価 (ショートサーキット)

[論理積演算子](/ja/docs/Web/JavaScript/Reference/Operators/Logical_AND)は左から右に評価され、次のルールを使って短絡評価の可能性があるかどうかテストされます。

`(偽値の式) && expr` は、偽値の式が短絡評価されます。

短絡評価とは、上記の `expr` 部分が**評価されない**ことを意味します。したがって、評価された場合の副作用は発生しません (例えば、`expr` が関数呼び出しである場合、呼び出しは行われません)。

論理積代入も短絡評価されます。これは、`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}}

## 関連情報

- [論理積演算子 (&&)](/ja/docs/Web/JavaScript/Reference/Operators/Logical_AND)
- [Null 合体演算子 (`??`)](/ja/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing_operator)
- [ビット論理積代入 (`&=`)](/ja/docs/Web/JavaScript/Reference/Operators/Bitwise_AND_assignment)
- {{Glossary("Truthy", "真値")}}
- {{Glossary("Falsy", "偽値")}}