diff options
Diffstat (limited to 'files/ru/conflicting/web/javascript/reference/operators_843c998343f0cdaa5699874c806d4cea/index.html')
-rw-r--r-- | files/ru/conflicting/web/javascript/reference/operators_843c998343f0cdaa5699874c806d4cea/index.html | 302 |
1 files changed, 0 insertions, 302 deletions
diff --git a/files/ru/conflicting/web/javascript/reference/operators_843c998343f0cdaa5699874c806d4cea/index.html b/files/ru/conflicting/web/javascript/reference/operators_843c998343f0cdaa5699874c806d4cea/index.html deleted file mode 100644 index b5f93ec4e7..0000000000 --- a/files/ru/conflicting/web/javascript/reference/operators_843c998343f0cdaa5699874c806d4cea/index.html +++ /dev/null @@ -1,302 +0,0 @@ ---- -title: Логические операторы -slug: >- - conflicting/Web/JavaScript/Reference/Operators_843c998343f0cdaa5699874c806d4cea -translation_of: Web/JavaScript/Reference/Operators -translation_of_original: Web/JavaScript/Reference/Operators/Logical_Operators -original_slug: Web/JavaScript/Reference/Operators/Логические_операторы ---- -<div>{{jsSidebar("Operators")}}</div> - -<div>Логические операторы используются, как правило, с примитивами {{jsxref("Boolean")}} (логического) типа. В этом случае результатом работы оператора является значение типа Boolean. Между тем операторы && и || возвращают, вообще говоря, значение одного из операнда, потому при использовании в качестве аргументов этих операторов величин, тип которых отличен от Boolean, тип возвращаемого значения может быть отличным от Boolean.</div> - -<div></div> - -<h2 id="Описание">Описание</h2> - -<p>В таблице приведены описания логических операторов:</p> - -<table class="fullwidth-table"> - <tbody> - <tr> - <th>Оператор</th> - <th>Использование</th> - <th>Описание</th> - </tr> - <tr> - <td>Логическое И (&&)</td> - <td><code><em>expr1</em> && <em>expr2</em></code></td> - <td>Возвращает значение <code>expr1</code>, если оно может быть преобразовано в false; иначе возвращает значение <code>expr2</code>. Таким образом, при использовании с величинами типа Boolean оператор && вернёт true, если оба операнда могут быть преобразованы в true; иначе оператор && вернёт false. </td> - </tr> - <tr> - <td>Логическое ИЛИ (<code>||</code>)</td> - <td><code><em>expr1</em> || <em>expr2</em></code></td> - <td> - <p>Возвращает значение <code>expr1</code>, если оно может быть преобразовано в true; иначе возвращает значение <code>expr2.</code> Таким образом, при использовании с величинами типа Boolean оператор <code>||</code> вернёт <code>true</code> если хоть один из них равен <code>true</code>; в других случаях вернёт <code>false</code>.</p> - </td> - </tr> - <tr> - <td>Логическое НЕ (<code>!</code>)</td> - <td><code>!<em>expr</em></code></td> - <td>Возвращает false если значение <code>expr </code>можно<font face="Consolas, Liberation Mono, Courier, monospace"> </font>привести к <code>true</code>; в противоположном случае возвращает <code>true</code>.</td> - </tr> - </tbody> -</table> - -<p>Примеры значений выражений, которые могут быть преобразованы в <code>false</code>:</p> - -<ul> - <li><code>null</code>;</li> - <li><code>NaN;</code></li> - <li><code>0</code>;</li> - <li>пустая строка (<code>""</code>); </li> - <li><code>undefined</code>.</li> -</ul> - -<p>Хоть операторы <code>&&</code> и <code>||</code> могут использовать операнды с не булевыми значениями, но они всё равно рассматриваются, как булевы операторы, т.к. их возвращаемые ими значения всегда могут быть сконвертированы в булевы значения.</p> - -<h3 id="Короткая_схема_вычислений">Короткая схема вычислений</h3> - -<p>Так как логические операторы выполняются слева направо, они проверяются на "короткие вычисления" по следующим правилам:</p> - -<ul> - <li><code>false && (<em>anything)</em></code> короткое вычисление дающее false.</li> - <li><code>true || (<em>anything)</em></code> короткое замыкание дающее true.</li> -</ul> - -<p>Часть выражения <code>(<em>anything)</em></code> не вычисляется. Если в ней есть вызов функции, то эта функция не будет вызвана.</p> - -<p>Например, следующие две функции делают одно и тоже:</p> - -<pre class="brush: js">function shortCircuitEvaluation() { - doSomething() || doSomethingElse() -} - -function equivalentEvaluation() { - var flag = doSomething(); - if (!flag) { - doSomethingElse(); - } -} -</pre> - -<p>Однако, следующие выражения дают разный результат в связи с <a href="/ru/docs/Web/JavaScript/Reference/Operators/Operator_Precedence">приоритетом операторов</a>.</p> - -<pre class="brush: js">false && true || true // вернёт true -false && (true || true) // вернёт false</pre> - -<h3 id="Логическое_И"><a name="Logical_AND">Логическое И (<code>&&</code>)</a></h3> - -<p>Следующий код показывает пример оператора <code>&&</code> (логическое И).</p> - -<pre class="brush: js">a1 = true && true // t && t вернёт true -a2 = true && false // t && f вернёт false -a3 = false && true // f && t вернёт false -a4 = false && (3 == 4) // f && f вернёт false -a5 = "Cat" && "Dog" // t && t вернёт "Dog" -a6 = false && "Cat" // f && t вернёт false -a7 = "Cat" && false // t && f вернёт false -</pre> - -<h3 id="Логическое_ИЛИ"><a name="Logical_OR">Логическое ИЛИ (<code>||</code>)</a></h3> - -<p>Это код представляет собой пример оператора <code>||</code> (логическое ИЛИ).</p> - -<pre class="brush: js">o1 = true || true // t || t вернёт true -o2 = false || true // f || t вернёт true -o3 = true || false // t || f вернёт true -o4 = false || (3 == 4) // f || f вернёт false -o5 = "Cat" || "Dog" // t || t вернёт "Cat" -o6 = false || "Cat" // f || t вернёт "Cat" -o7 = "Cat" || false // t || f вернёт "Cat" -</pre> - -<h3 id="Логическое_НЕ_!"><a name="Logical_NOT">Логическое НЕ (<code>!</code>)</a></h3> - -<p>Следующий код является примером оператора <code>!</code> (логическое НЕ).</p> - -<pre class="brush: js">n1 = !true // !t вернёт false -n2 = !false // !f вернёт true -n3 = !"Cat" // !t вернёт false -</pre> - -<h3 id="Правила_преобразования">Правила преобразования</h3> - -<h4 id="Конвертирование_И_в_ИЛИ">Конвертирование И в ИЛИ</h4> - -<p>следующая операция использует булев тип:</p> - -<pre class="brush: js">bCondition1 && bCondition2</pre> - -<p>это всегда равно:</p> - -<pre class="brush: js">!(!bCondition1 || !bCondition2)</pre> - -<h4 id="Конвертирование_ИЛИ_в_И">Конвертирование ИЛИ в И</h4> - -<p>эта операция использует булев тип:</p> - -<pre class="brush: js">bCondition1 || bCondition2</pre> - -<p>что эквивалентно:</p> - -<pre class="brush: js">!(!bCondition1 && !bCondition2)</pre> - -<h4 id="Конвертирование_многих_НЕ">Конвертирование многих НЕ</h4> - -<p>следующая операция использует булев тип:</p> - -<pre class="brush: js">!!bCondition</pre> - -<p>что равно:</p> - -<pre class="brush: js">bCondition</pre> - -<h3 id="Удаление_вложенных_скобок">Удаление вложенных скобок</h3> - -<p>Так как логические выражения выполняются слева направо, становится возможным удалить круглые скобки из комплексного выражения, следуя следующим правилам.</p> - -<h4 id="Удаление_вложенных_И">Удаление вложенных И</h4> - -<p>Это составное выражение использует булев тип:</p> - -<pre class="brush: js">bCondition1 || (bCondition2 && bCondition3)</pre> - -<p>что будет равным:</p> - -<pre class="brush: js">bCondition1 || bCondition2 && bCondition3</pre> - -<h4 id="Удаление_вложенного_ИЛИ">Удаление вложенного ИЛИ</h4> - -<p>Следующее составное выражение использует булев тип:</p> - -<pre class="brush: js">bCondition1 && (bCondition2 || bCondition3)</pre> - -<p>всегда равно:</p> - -<pre class="brush: js">!(!bCondition1 || !bCondition2 && !bCondition3)</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('ES5.1')}}</td> - <td>{{Spec2('ES1')}}</td> - <td>Изначальное определение</td> - </tr> - <tr> - <td>{{SpecName('ES5.1', '#sec-11.11')}}</td> - <td>{{Spec2('ES5.1')}}</td> - <td>Определено в нескольких секциях спецификации: <a href="http://www.ecma-international.org/ecma-262/5.1/#sec-11.4.9">Логический оператор НЕ</a>, <a href="http://www.ecma-international.org/ecma-262/5.1/#sec-11.11">Бинарные логические операторы</a></td> - </tr> - <tr> - <td>{{SpecName('ES6', '#sec-binary-logical-operators')}}</td> - <td>{{Spec2('ES6')}}</td> - <td>Определено в нескольких секциях спецификации: <a href="http://www.ecma-international.org/ecma-262/5.1/#sec-11.4.9">Логический оператор НЕ</a>, <a href="http://www.ecma-international.org/ecma-262/5.1/#sec-11.11">Бинарные логические операторы</a></td> - </tr> - <tr> - <td>{{SpecName('ESDraft', '#sec-binary-logical-operators')}}</td> - <td>{{Spec2('ESDraft')}}</td> - <td>Определено в нескольких секциях спецификации: <a href="http://tc39.github.io/ecma262/#sec-logical-not-operator">Логический оператор НЕ</a>, <a href="http://tc39.github.io/ecma262/#sec-binary-logical-operators">Бинарные логические операторы</a></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><a href="#Logical_AND">Логическое И (<code>&&</code>)</a></td> - <td>{{CompatVersionUnknown}}</td> - <td>{{CompatVersionUnknown}}</td> - <td>{{CompatVersionUnknown}}</td> - <td>{{CompatVersionUnknown}}</td> - <td>{{CompatVersionUnknown}}</td> - </tr> - <tr> - <td><a href="#Logical_OR">Логическое ИЛИ (<code>||</code>)</a></td> - <td>{{CompatVersionUnknown}}</td> - <td>{{CompatVersionUnknown}}</td> - <td>{{CompatVersionUnknown}}</td> - <td>{{CompatVersionUnknown}}</td> - <td>{{CompatVersionUnknown}}</td> - </tr> - <tr> - <td><a href="#Logical_NOT">Логическое НЕ (<code>!</code>)</a></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><a href="#Logical_AND">Логическое И (<code>&&</code>)</a></td> - <td>{{CompatVersionUnknown}}</td> - <td>{{CompatVersionUnknown}}</td> - <td>{{CompatVersionUnknown}}</td> - <td>{{CompatVersionUnknown}}</td> - <td>{{CompatVersionUnknown}}</td> - <td>{{CompatVersionUnknown}}</td> - </tr> - <tr> - <td><a href="#Logical_OR">Логическое ИЛИ (<code>||</code>)</a></td> - <td>{{CompatVersionUnknown}}</td> - <td>{{CompatVersionUnknown}}</td> - <td>{{CompatVersionUnknown}}</td> - <td>{{CompatVersionUnknown}}</td> - <td>{{CompatVersionUnknown}}</td> - <td>{{CompatVersionUnknown}}</td> - </tr> - <tr> - <td><a href="#Logical_NOT">Логическое НЕ (<code>!</code>)</a></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/Bitwise_Operators">Битовые операторы</a></li> - <li><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Boolean">Boolean</a></li> -</ul> |