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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
|
---
title: Операторы присваивания
slug: >-
conflicting/Web/JavaScript/Reference/Operators_8d54701de06af40a7c984517cbe87b3e
tags:
- JavaScript
- Оператор
translation_of: Web/JavaScript/Reference/Operators#Assignment_operators
translation_of_original: Web/JavaScript/Reference/Operators/Assignment_Operators
original_slug: Web/JavaScript/Reference/Operators/Assignment_Operators
---
<div>{{jsSidebar("Operators")}}</div>
<p><strong>Оператор присваивания</strong> присваивает левому операнду значение, основанное на значении правого операнда.</p>
<h2 id="Описание">Описание</h2>
<p>Основной оператор присваивания - это знак равно (<code>=</code>), он и присваивает значение правого операнда, левому. То есть - <code>x = y</code> присваивает значение переменной <code>y</code>, переменной <code>x</code>. Другие операторы присваивания, как следует из приведенной ниже таблицы с определениями и примерами, являются сокращениями стандартных операций.</p>
<table class="standard-table">
<tbody>
<tr>
<th>Имя</th>
<th>Сокращенный оператор</th>
<th>Смысл</th>
</tr>
<tr>
<td><a href="#Assignment">Присваивание</a></td>
<td><code>x = y</code></td>
<td><code>x = y</code></td>
</tr>
<tr>
<td><a href="#Addition_assignment">Присваивание со сложением</a></td>
<td><code>x += y</code></td>
<td><code>x = x + y</code></td>
</tr>
<tr>
<td><a href="#Subtraction_assignment">Присваивание с вычитанием</a></td>
<td><code>x -= y</code></td>
<td><code>x = x - y</code></td>
</tr>
<tr>
<td><a href="#Multiplication_assignment">Присваивание с умножением</a></td>
<td><code>x *= y</code></td>
<td><code>x = x * y</code></td>
</tr>
<tr>
<td><a href="#Division_assignment">Присваивание с делением</a></td>
<td><code>x /= y</code></td>
<td><code>x = x / y</code></td>
</tr>
<tr>
<td><a href="#Remainder_assignment">Присваивание по модулю</a></td>
<td><code>x %= y</code></td>
<td><code>x = x % y</code></td>
</tr>
<tr>
<td><a href="#Left_shift_assignment">Присваивание с левым сдвигом</a></td>
<td><code>x <<= y</code></td>
<td><code>x = x << y</code></td>
</tr>
<tr>
<td><a href="#Right_shift_assignment">Присваивание с правым сдвигом</a></td>
<td><code>x >>= y</code></td>
<td><code>x = x >> y</code></td>
</tr>
<tr>
<td><a href="#Unsigned_right_shift_assignment">Присваивание с беззнаковым сдвигом вправо</a></td>
<td><code>x >>>= y</code></td>
<td><code>x = x >>> y</code></td>
</tr>
<tr>
<td><a href="#Bitwise_AND_assignment">Присваивание с побитовым AND</a></td>
<td><code>x &= y</code></td>
<td><code>x = x & y</code></td>
</tr>
<tr>
<td><a href="#Bitwise_XOR_assignment">Присваивание с побитовым XOR</a></td>
<td><code>x ^= y</code></td>
<td><code>x = x ^ y</code></td>
</tr>
<tr>
<td><a href="#Bitwise_OR_assignment">Присваивание с побитовым OR</a></td>
<td><code>x |= y</code></td>
<td><code>x = x | y</code></td>
</tr>
</tbody>
</table>
<h2 id="Присваивание">Присваивание</h2>
<p>Простой оператор присваивания, который задает значение переменной. Цепочка операторов присваивания может быть использована для назначения нескольким переменным одного и того же значения. Смотрите пример.</p>
<h4 id="Синтаксис">Синтаксис</h4>
<pre class="syntaxbox"><strong>Оператор:</strong> x = y
</pre>
<h4 id="Примеры">Примеры</h4>
<pre class="brush: js">// Например, следующие переменные:
// x = 5
// y = 10
// z = 25
x = y // x - 10
x = y = z // x, y и z все равны 25
</pre>
<h2 id="Присваивание_со_сложением">Присваивание со сложением</h2>
<p>Оператор добавочного присваивания, <strong>добавляет</strong> значение правого операнда к значению левого, и сохраняет результат в переменную левого операнда.<strong> </strong>Типы значений обоих операндов, определяют поведение оператора добавочного присваивания. Возможны сложение и конкатенация. Смотрите {{jsxref("Operators/Arithmetic_Operators", "addition operator", "#Addition", 1)}} для подробностей.</p>
<h4 id="Синтаксис_2">Синтаксис</h4>
<pre class="syntaxbox"><strong>Оператор:</strong> x += y
<strong>Значение:</strong> x = x + y
</pre>
<h4 id="Примеры_2">Примеры</h4>
<pre class="brush: js">// Например, следующие переменные:
// foo = "foo"
// bar = 5
// baz = true
// Результат исполнения каждого нижеприведенного примера
// представлен в изоляции от предыдущих примеров (как если
// бы значения переменных foo, bar, baz возвращались на
// первоначальные)
// Number + Number -> сложение
bar += 2 // 7
// Boolean + Number -> сложение
baz += 1 // 2
// Boolean + Boolean -> сложение
baz += false // 1
// Number + String -> конкатенация
bar += "foo" // "5foo"
// String + Boolean -> конкатенация
foo += false // "foofalse"
// String + String -> конкатенация
foo += "bar" // "foobar"
</pre>
<h2 id="Присваивание_с_вычитанием">Присваивание с вычитанием</h2>
<p>Оператор вычитаемого присваивания <strong>вычитает</strong> значение правого операнда из значения левого, и присваивает результат переменной левого операнда. Смотрите {{jsxref("Operators/Arithmetic_Operators", "subtraction operator", "#Subtraction", 1)}} для подробностей.</p>
<h4 id="Синтаксис_3">Синтаксис</h4>
<pre class="syntaxbox"><strong>Оператор:</strong> x -= y
<strong>Значение:</strong> x = x - y
</pre>
<h4 id="Примеры_3">Примеры</h4>
<pre class="brush: js">// Например, следующие переменные:
// bar = 5
bar -= 2 // 3
bar -= "foo" // NaN
</pre>
<h3 id="Присваивание_с_умножением"><a name="Multiplication_assignment">Присваивание с умножением</a></h3>
<p>The multiplication assignment operator <strong>multiplies</strong> a variable by the value of the right operand and assigns the result to the variable. See the {{jsxref("Operators/Arithmetic_Operators", "multiplication operator", "#Multiplication", 1)}} for more details.</p>
<h4 id="Синтаксис_4">Синтаксис</h4>
<pre class="syntaxbox"><strong>Оператор:</strong> x *= y
<strong>Значение:</strong> x = x * y
</pre>
<h4 id="Примеры_4">Примеры</h4>
<pre class="brush: js">// Assuming the following variable
// bar = 5
bar *= 2 // 10
bar *= "foo" // NaN
</pre>
<h3 id="Присваивание_с_делением"><a name="Division_assignment">Присваивание с делением</a></h3>
<p>The division assignment operator <strong>divides</strong> a variable by the value of the right operand and assigns the result to the variable. See the {{jsxref("Operators/Arithmetic_Operators", "division operator", "#Division", 1)}} for more details.</p>
<h4 id="Синтаксис_5">Синтаксис</h4>
<pre class="syntaxbox"><strong>Оператор:</strong> x /= y
<strong>Значение:</strong> x = x / y
</pre>
<h4 id="Примеры_5">Примеры</h4>
<pre class="brush: js">// Assuming the following variable
// bar = 5
bar /= 2 // 2.5
bar /= "foo" // NaN
bar /= 0 // Infinity
</pre>
<h3 id="Присваивание_по_модулю"><a name="Remainder_assignment">Присваивание по модулю</a></h3>
<p>The remainder assignment operator <strong>divides</strong> a variable by the value of the right operand and assigns the <strong>remainder</strong> to the variable. See the {{jsxref("Operators/Arithmetic_Operators", "remainder operator", "#Remainder", 1)}} for more details.</p>
<h4 id="Синтаксис_6">Синтаксис</h4>
<pre class="syntaxbox"><strong>Оператор:</strong> x %= y
<strong>Значение:</strong> x = x % y
</pre>
<h4 id="Примеры_6">Примеры</h4>
<pre class="brush: js">// Assuming the following variable
// bar = 5
bar %= 2 // 1
bar %= "foo" // NaN
bar %= 0 // NaN
</pre>
<h3 id="Присваивание_с_левым_сдвигом"><a name="Left_shift_assignment">Присваивание с левым сдвигом</a></h3>
<p>The left shift assignment operator moves the specified amount of bits to the left and assigns the result to the variable. See the {{jsxref("Operators/Bitwise_Operators", "left shift operator", "#Left_shift", 1)}} for more details.</p>
<h4 id="Синтаксис_7">Синтаксис</h4>
<pre class="syntaxbox"><strong>Оператор:</strong> x <<= y
<strong>Значение:</strong> x = x << y
</pre>
<h4 id="Примеры_7">Примеры</h4>
<pre class="brush: js">var bar = 5; // (00000000000000000000000000000101)
bar <<= 2; // 20 (00000000000000000000000000010100)
</pre>
<h3 id="Присваивание_с_правым_сдвигом"><a name="Right_shift_assignment">Присваивание с правым сдвигом</a></h3>
<p>The right shift assignment operator moves the specified amount of bits to the right and assigns the result to the variable. See the {{jsxref("Operators/Bitwise_Operators", "right shift operator", "#Right_shift", 1)}} for more details.</p>
<h4 id="Синтаксис_8">Синтаксис</h4>
<pre class="syntaxbox"><strong>Оператор:</strong> x >>= y
<strong>Значение:</strong> x = x >> y
</pre>
<h4 id="Примеры_8">Примеры</h4>
<pre class="brush: js">var bar = 5; // (00000000000000000000000000000101)
bar >>= 2; // 1 (00000000000000000000000000000001)
var bar -5; // (-00000000000000000000000000000101)
bar >>= 2; // -2 (-00000000000000000000000000000010)
</pre>
<h3 id="Присваивание_с_беззнаковым_сдвигом_вправо"><a name="Unsigned_right_shift_assignment">Присваивание с беззнаковым сдвигом вправо</a></h3>
<p>The unsigned right shift assignment operator moves the specified amount of bits to the right and assigns the result to the variable. See the {{jsxref("Operators/Bitwise_Operators", " unsigned right shift operator", "#Unsigned_right_shift", 1)}} for more details.</p>
<h4 id="Синтаксис_9">Синтаксис</h4>
<pre class="syntaxbox"><strong>Оператор:</strong> x >>>= y
<strong>Значение:</strong> x = x >>> y
</pre>
<h4 id="Примеры_9">Примеры</h4>
<pre class="brush: js">var bar = 5; // (00000000000000000000000000000101)
bar >>>= 2; // 1 (00000000000000000000000000000001)
var bar = -5; // (-00000000000000000000000000000101)
bar >>>= 2; // 1073741822 (00111111111111111111111111111110)</pre>
<h3 id="Присваивание_с_побитовым_AND"><a name="Bitwise_AND_assignment">Присваивание с побитовым AND</a></h3>
<p>The bitwise AND assignment operator uses the binary representation of both operands, does a bitwise AND operation on them and assigns the result to the variable. See the {{jsxref("Operators/Bitwise_Operators", "bitwise AND operator", "#Bitwise_AND", 1)}} for more details.</p>
<h4 id="Синтаксис_10">Синтаксис</h4>
<pre class="syntaxbox"><strong>Оператор:</strong> x &= y
<strong>Значение:</strong> x = x & y
</pre>
<h4 id="Примеры_10">Примеры</h4>
<pre class="brush: js">var bar = 5;
// 5: 00000000000000000000000000000101
// 2: 00000000000000000000000000000010
bar &= 2; // 0
</pre>
<h3 id="Присваивание_с_побитовым_XOR"><a name="Bitwise_XOR_assignment">Присваивание с побитовым XOR</a></h3>
<p>Побитовый оператор присваивания XOR использует двоичное представление обоих операндов, выполняет побитовую XOR-операцию и присваивает результат переменной. Для получения более подробной информации см. {{jsxref("Operators/Bitwise_Operators", "Побитовый оператор XOR", "#Bitwise_XOR", 1)}}.</p>
<h4 id="Синтаксис_11">Синтаксис</h4>
<pre class="syntaxbox"><strong>Оператор:</strong> x ^= y
<strong>Значение:</strong> x = x ^ y
</pre>
<h4 id="Примеры_11">Примеры</h4>
<pre class="brush: js">var bar = 5;
bar ^= 2; // 7
// 5: 00000000000000000000000000000101
// 2: 00000000000000000000000000000010
// -----------------------------------
// 7: 00000000000000000000000000000111
</pre>
<h3 id="Присваиванием_с_побитовым_OR"><a name="Bitwise_OR_assignment">Присваиванием с побитовым OR</a></h3>
<p>Побитовый оператор присваивания OR использует двоичное (бинарное) представление обоих операндов, выполняет побитовое ИЛИ для них и присваивает результат переменной. Дополнительную информацию см. {{jsxref("Operators/Bitwise_Operators", "Побитовый оператор OR", "#Bitwise_OR", 1)}}.</p>
<h4 id="Синтаксис_12">Синтаксис</h4>
<pre class="syntaxbox"><strong>Оператор:</strong> x |= y
<strong>Значение:</strong> x = x | y
</pre>
<h4 id="Примеры_12">Примеры</h4>
<pre class="brush: js">var bar = 5;
bar |= 2; // 7
// 5: 00000000000000000000000000000101
// 2: 00000000000000000000000000000010
// -----------------------------------
// 7: 00000000000000000000000000000111
</pre>
<h2 id="Примеры_13">Примеры</h2>
<h3 id="Левый_операнд_с_другим_оператором_присваивания">Левый операнд с другим оператором присваивания</h3>
<p>В необычных ситуациях оператор присваивания, например, <em>x += y</em> не идентичен выражению, <em>x = x + y</em>. Когда левый операнд оператора присваивания содержит оператор присваивания, левый операнд оценивается только один раз. Например:</p>
<pre class="brush: js">a[i++] += 5 // i оценивается только один раз
a[i++] = a[i++] + 5 // i оценивается дважды
</pre>
<h2 id="Спецификации">Спецификации</h2>
<table class="standard-table">
<tbody>
<tr>
<th scope="col">Спецификация</th>
<th scope="col">Статус</th>
<th scope="col">Комментарий</th>
</tr>
<tr>
<td>ECMAScript 1-е издание.</td>
<td>Стандарт</td>
<td>Изначальное определение.</td>
</tr>
<tr>
<td>{{SpecName('ES5.1', '#sec-11.13', 'Операторы присваивания')}}</td>
<td>{{Spec2('ES5.1')}}</td>
<td> </td>
</tr>
<tr>
<td>{{SpecName('ES6', '#sec-assignment-operators', 'Операторы присваивания')}}</td>
<td>{{Spec2('ES6')}}</td>
<td> </td>
</tr>
</tbody>
</table>
<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
<p>{{ CompatibilityTable() }}</p>
<div id="compat-desktop">
<table class="compat-table">
<tbody>
<tr>
<th>Возможность</th>
<th>Chrome</th>
<th>Firefox (Gecko)</th>
<th>Internet Explorer</th>
<th>Opera</th>
<th>Safari</th>
</tr>
<tr>
<td>Базовая поддержка</td>
<td>{{ CompatVersionUnknown() }}</td>
<td>{{ CompatVersionUnknown() }}</td>
<td>{{ CompatVersionUnknown() }}</td>
<td>{{ CompatVersionUnknown() }}</td>
<td>{{ CompatVersionUnknown() }}</td>
</tr>
</tbody>
</table>
</div>
<div id="compat-mobile">
<table class="compat-table">
<tbody>
<tr>
<th>Возможность</th>
<th>Android</th>
<th>Chrome for Android</th>
<th>Firefox Mobile (Gecko)</th>
<th>IE Mobile</th>
<th>Opera Mobile</th>
<th>Safari Mobile</th>
</tr>
<tr>
<td>Базовая поддержка</td>
<td>{{ CompatVersionUnknown() }}</td>
<td>{{ CompatVersionUnknown() }}</td>
<td>{{ CompatVersionUnknown() }}</td>
<td>{{ CompatVersionUnknown() }}</td>
<td>{{ CompatVersionUnknown() }}</td>
<td>{{ CompatVersionUnknown() }}</td>
</tr>
</tbody>
</table>
</div>
<h2 id="Смотрите_также">Смотрите также</h2>
<ul>
<li><a href="/ru/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators">Арифметические операции</a></li>
</ul>
|