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
|
---
title: Арифметичні оператори
slug: conflicting/Web/JavaScript/Reference/Operators
tags:
- JavaScript
- Оператор
translation_of: Web/JavaScript/Reference/Operators
translation_of_original: Web/JavaScript/Reference/Operators/Arithmetic_Operators
original_slug: Web/JavaScript/Reference/Operators/Arithmetic_Operators
---
<div>{{jsSidebar("Operators")}}</div>
<p><strong>Арифметичні оператори</strong> приймають числові значення (або літерали, або змінні) в якості операндів та повертають єдине числове значення. Стандартними арифметичними операторами є додавання (+), віднімання (-), множення (*) та ділення (/).</p>
<div>{{EmbedInteractiveExample("pages/js/expressions-arithmetic.html")}}</div>
<h2 id="Addition" name="Addition">Додавання (+)</h2>
<p>Оператор додавання повертає суму числових операндів або об'єднання рядків.</p>
<h3 id="Синтаксис">Синтаксис</h3>
<pre class="syntaxbox"><strong>Оператор:</strong> x + y
</pre>
<h3 id="Приклади">Приклади</h3>
<pre class="brush: js">// Number + Number -> сума
1 + 2 // 3
// Boolean + Number -> сума
true + 1 // 2
// Boolean + Boolean -> сума
false + false // 0
// Number + String -> об'єднання
5 + 'foo' // "5foo"
// String + Boolean -> об'єднання
'foo' + false // "foofalse"
// String + String -> об'єднання
'foo' + 'bar' // "foobar"
</pre>
<h2 id="Subtraction" name="Subtraction">Віднімання (-)</h2>
<p>Оператор віднімання проводить операцію віднімання між двома операндами, повертаючи різницю між ними.</p>
<h3 id="Синтаксис_2">Синтаксис</h3>
<pre class="syntaxbox"><strong>Оператор:</strong> x - y
</pre>
<h3 id="Приклади_2">Приклади</h3>
<pre class="brush: js">5 - 3 // 2
3 - 5 // -2
'foo' - 3 // NaN</pre>
<h2 id="Division" name="Division">Ділення (/)</h2>
<p>Оператор ділення повертає частку своїх операндів, де лівий операнд є діленим, а правий операнд є дільником.</p>
<h3 id="Синтаксис_3">Синтаксис</h3>
<pre class="syntaxbox"><strong>Оператор:</strong> x / y
</pre>
<h3 id="Приклади_3">Приклади</h3>
<pre class="brush: js">1 / 2 // повертає 0.5 у JavaScript
1 / 2 // повертає 0 у Java
// (жодне з чисел не є явно числом з рухомою комою)
1.0 / 2.0 // повертає 0.5 у JavaScript та Java
2.0 / 0 // повертає Infinity у JavaScript
2.0 / 0.0 // також повертає Infinity
2.0 / -0.0 // повертає -Infinity у JavaScript</pre>
<h2 id="Multiplication" name="Multiplication">Множення (*)</h2>
<p>Оператор множення повертає добуток операндів.</p>
<h3 id="Синтаксис_4">Синтаксис</h3>
<pre class="syntaxbox"><strong>Оператор:</strong> x * y
</pre>
<h3 id="Приклади_4">Приклади</h3>
<pre class="brush: js">2 * 2 // 4
-2 * 2 // -4
Infinity * 0 // NaN
Infinity * Infinity // Infinity
'foo' * 2 // NaN
</pre>
<h2 id="Remainder" name="Remainder">Остача (%)</h2>
<p>Оператор остачі повертає остачу від ділення першого операнду на другий. Він завжди приймає знак діленого.</p>
<h3 id="Синтаксис_5">Синтаксис</h3>
<pre class="syntaxbox"><strong>Оператор:</strong> var1 % var2
</pre>
<h3 id="Приклади_5">Приклади</h3>
<pre class="brush: js">12 % 5 // 2
-1 % 2 // -1
1 % -2 // 1
NaN % 2 // NaN
1 % 2 // 1
2 % 3 // 2
-4 % 2 // -0
5.5 % 2 // 1.5
</pre>
<h2 id="Exponentiation" name="Exponentiation">Піднесення до степеня (**)</h2>
<p>Оператор піднесення до степеня повертає результат піднесення першого операнду до показника степеня другого операнду. Тобто, <code>var1</code><sup><code>var2</code></sup> у наведеній інструкції, де <code>var1</code> та <code>var2</code> є змінними. Оператор піднесення до степеня правоасоціативний. <code>a ** b ** c</code> дорівнює <code>a ** (b ** c)</code>.</p>
<h3 id="Синтаксис_6">Синтаксис</h3>
<pre class="syntaxbox"><strong>Оператор:</strong> var1 ** var2
</pre>
<h3 id="Примітки">Примітки</h3>
<p>У більшості мов, таких як PHP, Python та інших, які мають оператор піднесення до степеня (**), оператор піднесення до степеня має вищий пріоритет, ніж унарні оператори, такі як унарний + та унарний -, але існує кілька винятків. Наприклад, у Bash оператор ** має нижчий пріоритет, ніж унарні оператори. У JavaScript неможливо написати неоднозначний вираз піднесення до степеня, тобто, ви не можете поставити унарний оператор (<code>+/-/~/!/delete/void/typeof</code>) одразу перед числом основи степеня.</p>
<pre class="brush: js">-2 ** 2;
// 4 у Bash, -4 у інших мовах.
// Це помилка у JavaScript, оскільки операція неоднозначна.
-(2 ** 2);
// -4 у JavaScript, а наміри автора однозначні.
</pre>
<h3 id="Приклади_6">Приклади</h3>
<pre class="brush: js">2 ** 3 // 8
3 ** 2 // 9
3 ** 2.5 // 15.588457268119896
10 ** -1 // 0.1
NaN ** 2 // NaN
2 ** 3 ** 2 // 512
2 ** (3 ** 2) // 512
(2 ** 3) ** 2 // 64
</pre>
<p>Щоб поміняти знак результату виразу піднесення до степеня:</p>
<pre class="brush: js">-(2 ** 2) // -4
</pre>
<p>Щоб зробити основу степеня у виразі від'ємним числом:</p>
<pre class="brush: js">(-2) ** 2 // 4
</pre>
<div class="note">
<p><strong>Заувага:</strong> JavaScript також має <a href="/uk/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Bitwise_XOR">бітовий оператор ^ (логічний XOR)</a>. <code>**</code> та <code>^</code> відрізняються (наприклад: <code>2 ** 3 === 8</code>, тоді як <code>2 ^ 3 === 1</code>.)</p>
</div>
<h2 id="Increment" name="Increment">Інкремент (++)</h2>
<p>Оператор інкременту збільшує свій операнд (додає одиницю) та повертає його значення.</p>
<ul>
<li>Якщо оператор використовується постфіксно, після операнду (наприклад, x++), тоді він збільшує значення та повертає його до збільшення.</li>
<li>Якщо оператор використовується префіксно, перед операндом (наприклад, ++x), тоді він збільшує значення та повертає його після збільшення.</li>
</ul>
<h3 id="Синтаксис_7">Синтаксис</h3>
<pre class="syntaxbox"><strong>Оператор:</strong> x++ або ++x
</pre>
<h3 id="Приклади_7">Приклади</h3>
<pre class="brush: js">// Постфіксний
var x = 3;
y = x++; // y = 3, x = 4
// Префіксний
var a = 2;
b = ++a; // a = 3, b = 3
</pre>
<h2 id="Decrement" name="Decrement">Декремент (--)</h2>
<p>Оператор декременту зменшує свій операнд (віднімає одиницю) та повертає його значення.</p>
<ul>
<li>Якщо оператор використовується постфіксно, після операнду (наприклад, x--), тоді він зменшує значення та повертає його до зменшення.</li>
<li>Якщо оператор використовується префіксно, перед операндом (наприклад, --x), тоді він зменшує значення та повертає його після зменшення.</li>
</ul>
<h3 id="Синтаксис_8">Синтаксис</h3>
<pre class="syntaxbox"><strong>Оператор:</strong> x-- або --x
</pre>
<h3 id="Приклади_8">Приклади</h3>
<pre class="brush: js">// Постфіксний
var x = 3;
y = x--; // y = 3, x = 2
// Префіксний
var a = 2;
b = --a; // a = 1, b = 1
</pre>
<h2 id="Unary_negation" name="Unary_negation">Унарний мінус (-)</h2>
<p>Унарний мінус ставиться перед своїм операндом та міняє його знак на протилежний.</p>
<h3 id="Синтаксис_9">Синтаксис</h3>
<pre class="syntaxbox"><strong>Оператор:</strong> -x
</pre>
<h3 id="Приклади_9">Приклади</h3>
<pre class="brush: js">var x = 3;
y = -x; // y = -3, x = 3
// Унарний мінус може перетворити нечислове значення на число
var x = "4";
y = -x; // y = -4
</pre>
<h2 id="Унарний_плюс"><a id="Unary_plus" name="Unary_plus">Унарний плюс (+)</a></h2>
<p>Унарний плюс ставиться перед своїм операндом та повертає значення операнду, але намагається перетворити його на число, якщо він не є числом. Хоча унарний мінус (-) також вміє перетворювати нечислові значення, унарний плюс найшвидший та найкращий спосіб перетворити щось у число, тому що він не виконує ніяких інших операцій з числом. Він може перетворювати рядкові представлення цілих чисел та чисел з рухомою комою, а також нерядкові значення <code>true</code>, <code>false</code> та <code>null</code>. Підтримуються цілі числа у десятковому та шістнадцятковому форматах. Підтримуються від'ємні числа (хоча не у шістнадцятковому форматі). Якщо оператор не може розібрати певне значення, він поверне {{jsxref("NaN")}}.</p>
<h3 id="Синтаксис_10">Синтаксис</h3>
<pre class="syntaxbox"><strong>Оператор:</strong> +x
</pre>
<h3 id="Приклади_10">Приклади</h3>
<pre class="brush: js">+3 // 3
+'3' // 3
+true // 1
+false // 0
+null // 0
+function(val){ return val } // NaN
</pre>
<h2 id="Специфікації">Специфікації</h2>
<table class="standard-table">
<thead>
<tr>
<th scope="col">Специфікація</th>
<th scope="col">Статус</th>
<th scope="col">Коментар</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{SpecName('ESDraft', '#sec-additive-operators')}}</td>
<td>{{Spec2('ESDraft')}}</td>
<td></td>
</tr>
<tr>
<td>{{SpecName('ES2016', '#sec-postfix-expressions')}}</td>
<td>{{Spec2('ES2016')}}</td>
<td>Доданий <a href="https://github.com/rwaldron/exponentiation-operator">Оператор піднесення до степеня</a>.</td>
</tr>
<tr>
<td>{{SpecName('ES2017', '#sec-postfix-expressions')}}</td>
<td>{{Spec2('ES2017')}}</td>
<td></td>
</tr>
<tr>
<td>{{SpecName('ES2015', '#sec-postfix-expressions')}}</td>
<td>{{Spec2('ES2015')}}</td>
<td>Визначені у кількох розділах специфікації: <a href="http://www.ecma-international.org/ecma-262/6.0/#sec-additive-operators">Адитивні оператори</a>, <a href="http://www.ecma-international.org/ecma-262/6.0/#sec-multiplicative-operators">мультиплікативні оператори</a>, <a href="http://www.ecma-international.org/ecma-262/6.0/#sec-postfix-expressions">постфіксні вирази</a>, <a href="http://www.ecma-international.org/ecma-262/6.0/#sec-unary-operators">унарні оператори</a>.</td>
</tr>
<tr>
<td>{{SpecName('ES5.1', '#sec-11.3')}}</td>
<td>{{Spec2('ES5.1')}}</td>
<td>Визначені у кількох розділах специфікації: <a href="http://www.ecma-international.org/ecma-262/5.1/#sec-11.6">Адитивні оператори</a>, <a href="http://www.ecma-international.org/ecma-262/5.1/#sec-11.5">мультиплікативні оператори</a>, <a href="http://www.ecma-international.org/ecma-262/5.1/#sec-11.3">постфіксні вирази</a>, <a href="http://www.ecma-international.org/ecma-262/5.1/#sec-11.4">унарні оператори</a>.</td>
</tr>
<tr>
<td>{{SpecName('ES1')}}</td>
<td>{{Spec2('ES1')}}</td>
<td>Початкове визначення.</td>
</tr>
</tbody>
</table>
<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2>
<p>{{Compat("javascript.operators.arithmetic")}}</p>
<h2 id="Див._також">Див. також</h2>
<ul>
<li><a href="/uk/docs/Web/JavaScript/Reference/Operators/Оператори_присвоєння">Оператори присвоєння</a></li>
</ul>
|