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
|
---
title: Условный (тернарный) оператор
slug: Web/JavaScript/Reference/Operators/Условный_оператор
tags:
- JavaScript
- Оператор
translation_of: Web/JavaScript/Reference/Operators/Conditional_Operator
---
<div>{{jsSidebar("Operators")}}</div>
<p><strong>Условный (тернарный) оператор</strong> - единственный оператор в JavaScript, принимающий три операнда: условие, за которым следует знак вопроса (?), затем выражение, которое выполняется, если условие истинно, сопровождается двоеточием (:), и, наконец, выражение, которое выполняется, если условие ложно. Он часто используется в качестве укороченного варианта условного оператора <a href="/en-US/docs/Web/JavaScript/Reference/Statements/if...else"><code>if</code></a>.</p>
<h2 id="Синтаксис">Синтаксис</h2>
<pre class="syntaxbox notranslate"><em>условие</em> ? <em>выражение1</em> : <em>выражение2 </em></pre>
<h3 id="Параметры">Параметры</h3>
<dl>
<dt><code>условие</code></dt>
<dd>Выражение, принимающее значение <code>true</code> или <code>false</code>.</dd>
</dl>
<dl>
<dt><code>выражение1</code>, <code>выражение2</code></dt>
<dd>Выражения, значения которых могут принадлежать любому типу.</dd>
</dl>
<h2 id="Описание">Описание</h2>
<p>Оператор возвращает значение <code>выражения1</code>, если <code>условие</code> верно, и значение <code>выражения2</code> в противном случае. Например, чтобы вывести сообщение, текст которого зависит от значения переменной <code>isMember</code>, можно использовать такое выражение:</p>
<pre class="brush: js notranslate">"The fee is " + (isMember ? "$2.00" : "$10.00")
</pre>
<p>Также можно присваивать значения переменным на основе результатов работы тернарного оператора :</p>
<pre class="brush: js notranslate">var elvisLives = Math.PI > 4 ? "Да" : "Нет";</pre>
<p>Возможны множественные тернарные операции (обратите внимание: условный оператор ассоциативен справа):</p>
<pre class="brush: js notranslate">var firstCheck = false,
secondCheck = false,
access = firstCheck ? "Доступ запрещен" : secondCheck ? "Доступ запрещен" : "Доступ разрешен";
console.log( access ); // выводит в консоль "Доступ разрешен"</pre>
<p>Тернарные операции можно использовать и сами по себе - для выполнения различных операций:</p>
<pre class="brush: js notranslate">var stop = false, age = 16;
age > 18 ? location.assign("continue.html") : stop = true;
</pre>
<p>Также возможно выполнять несколько операций на каждое сравнение, разделив их запятыми:</p>
<pre class="brush: js notranslate">var stop = false, age = 23;
age > 18 ? (
alert("Хорошо, вы можете продолжить."),
location.assign("continue.html")
) : (
stop = true,
alert("Простите, вы еще так юны!")
);
</pre>
<p>При присвоении значения также возможно выполнение более одной операции. В этом случае переменной <strong>будет присвоено то значение, </strong><em><strong>которое стоит последним в списке значений, разделенных запятой</strong></em>.</p>
<pre class="brush: js notranslate">var age = 16;
var url = age > 18 ? (
alert("Хорошо, вы можете продолжить."),
// alert вернет "undefined", но это будет проигнорировано, потому что
// не является последним в списке значений, разделенных запятой
"continue.html" // значение будет присвоено, если age > 18
) : (
alert("Вы слишком молоды!"),
alert("Простите :-("),
// ит.д. ит.д.
"stop.html" // значение будет присвоено, если !(age > 18)
);
location.assign(url); // "stop.html"</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>{{SpecName('ES6', '#sec-conditional-operator', 'Условный Оператор')}}</td>
<td>{{Spec2('ES6')}}</td>
<td></td>
</tr>
<tr>
<td>{{SpecName('ES5.1', '#sec-11.12', 'Условный оператор')}}</td>
<td>{{Spec2('ES5.1')}}</td>
<td></td>
</tr>
<tr>
<td>{{SpecName('ES1', '#sec-11.12', 'Условный оператор')}}</td>
<td>{{Spec2('ES1')}}</td>
<td>Изначальное определение. Реализация в JavaScript 1.0.</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="/en-US/docs/Web/JavaScript/Reference/Statements/if...else">if statement</a></li>
</ul>
|