diff options
Diffstat (limited to 'files/ru/web/javascript/reference/operators')
10 files changed, 10 insertions, 1939 deletions
diff --git a/files/ru/web/javascript/reference/operators/arithmetic_operators/index.html b/files/ru/web/javascript/reference/operators/arithmetic_operators/index.html deleted file mode 100644 index f1091e3706..0000000000 --- a/files/ru/web/javascript/reference/operators/arithmetic_operators/index.html +++ /dev/null @@ -1,291 +0,0 @@ ---- -title: Арифметические операции -slug: Web/JavaScript/Reference/Operators/Arithmetic_Operators -tags: - - JavaScript - - Операторы -translation_of: Web/JavaScript/Reference/Operators -translation_of_original: Web/JavaScript/Reference/Operators/Arithmetic_Operators ---- -<div> -<div>{{jsSidebar("Operators")}}</div> -</div> - -<p><strong>Арифметические операции</strong> принимают в качестве операндов числовые значения (это может быть и литерал и переменная) и возвращают результат в виде одного числового значения. Стандартными арифметическими операциями являются сложение (<code>+</code>), вычитание (<code>-</code>), умножение (<code>*</code>) и деление (<code>/</code>).</p> - -<h2 id="Сложение"><a name="Addition">Сложение (+)</a></h2> - -<p>Оператор сложения возвращает сумму числовых операндов или объединяет строки.</p> - -<h3 id="Syntax" name="Syntax">Синтаксис</h3> - -<pre class="syntaxbox"><strong>Operator:</strong> x + y -</pre> - -<h3 id="Examples" name="Examples">Примеры</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="Вычитание_-"><a name="Subtraction">Вычитание (-)</a></h2> - -<p>Оператор вычитания вычитает один операнд из другого и возвращает разницу.</p> - -<h3 id="Syntax_2" name="Syntax_2">Синтаксис</h3> - -<pre class="syntaxbox"><strong>Operator:</strong> x - y -</pre> - -<h3 id="Examples_2" name="Examples_2">Примеры</h3> - -<pre class="brush: js">5 - 3 // 2 -3 - 5 // -2 -"foo" - 3 // NaN</pre> - -<h2 id="Деление"><a name="Division">Деление (/)</a></h2> - -<p>Оператор деления производит деление его операндов, где левый операнд - делимый, а правый - делитель.</p> - -<h3 id="Syntax_3" name="Syntax_3">Синтаксис</h3> - -<pre class="syntaxbox"><strong>Operator:</strong> x / y -</pre> - -<h3 id="Examples_3" name="Examples_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="Умножение_*"><a name="Multiplication">Умножение (*)</a></h2> - -<p>Оператор умножения возвращает произведение операндов.</p> - -<h3 id="Syntax_4" name="Syntax_4">Синтаксис</h3> - -<pre class="syntaxbox"><strong>Operator:</strong> x * y -</pre> - -<h3 id="Examples_4" name="Examples_4">Примеры</h3> - -<pre class="brush: js">2 * 2 // 4 --2 * 2 // -4 -Infinity * 0 // NaN -Infinity * Infinity // Infinity -"foo" * 2 // NaN -</pre> - -<h2 id="Остаток_от_деления"><a name="Remainder">Остаток от деления (%)</a></h2> - -<p>Оператор возвращает целый остаток от деления левого операнда на правый. Возвращаемое значение всегда получает знак делимого, а не делителя. Он использует встроенную функцию <code>modulo</code>, для получения результата, которая является целочисленным остатком деления <code>var1</code> на <code>var2</code> — например— <code>var1</code> modulo <code>var2</code>. <a href="http://wiki.ecmascript.org/doku.php?id=strawman:modulo_operator" title="http://wiki.ecmascript.org/doku.php?id=strawman:modulo_operator">Есть предложение добавить оператор modulo в будущие версии ECMAScript</a>, с той разницей, что оператор будет брать знак делителя, а не делимого.</p> - -<h3 id="Syntax_5" name="Syntax_5">Синтаксис</h3> - -<pre class="syntaxbox"><strong>Оператор:</strong> var1 % var2 -</pre> - -<h3 id="Examples_5" name="Examples_5">Примеры</h3> - -<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="number token">12</span> <span class="operator token">%</span> <span class="number token">5</span> <span class="comment token">// 2</span> -<span class="operator token">-</span><span class="number token">1</span> <span class="operator token">%</span> <span class="number token">2</span> <span class="comment token">// -1</span> -<span class="number token">NaN</span> <span class="operator token">%</span> <span class="number token">2</span> <span class="comment token">// NaN</span> -<span class="number token">1</span> <span class="operator token">%</span> <span class="number token">2</span> <span class="comment token">// 1</span> -<span class="number token">2</span> <span class="operator token">%</span> <span class="number token">3</span> <span class="comment token">// 2</span> -<span class="operator token">-</span><span class="number token">4</span> <span class="operator token">%</span> <span class="number token">2</span> <span class="comment token">// -0</span> -<span class="number token">5.5</span> <span class="operator token">%</span> <span class="number token">2</span> <span class="comment token">// 1.5</span></code></pre> - -<h2 id="Возведение_в_степень_**"><a name="Exponentiation">Возведение в степень (**)</a></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="Синтаксис">Синтаксис</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="Примеры">Примеры</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> - -<h2 id="Инкремент"><a name="Increment">Инкремент (++)</a></h2> - -<p>Оператор инкремента увеличивает на единицу(инкрементирует) операнд и возвращает значение.</p> - -<ul> - <li>Если операция используется как постфикс, с оператором после операнда (например, x++), значение операнда возвращается, а затем увеличивается на единицу.</li> - <li>Если используется префиксная форма с оператором перед операндом (например, ++x), значение операнда возвращается увеличенным на единицу.</li> -</ul> - -<h3 id="Syntax_6" name="Syntax_6">Синтаксис</h3> - -<pre class="syntaxbox"><strong>Оператор:</strong> x++ или ++x -</pre> - -<h3 id="Examples_6" name="Examples_6">Примеры</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="sect1"></h2> - -<h2 id="Декремент_--"><a name="Decrement">Декремент (--)</a></h2> - -<p>Операция декремента уменьшает на 1 (отнимает единицу) свой операнд и возвращает значение.</p> - -<ul> - <li>Если операция используется как постфикс (например, x--), значение операнда возвращается, а затем уменьшается на единицу.</li> - <li>Если используется префиксная форма (например, --x), значение операнда возвращается уменьшенным на единицу.</li> -</ul> - -<h3 id="Syntax_7" name="Syntax_7">Синтаксис</h3> - -<pre class="syntaxbox"><strong>Оператор:</strong> x-- или --x -</pre> - -<h3 id="Examples_7" name="Examples_7">Примеры</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="Унарный_минус_-"><a name="Unary_negation">Унарный минус (-)</a></h2> - -<p>Унарный минус ставится перед своим операндом и возвращает его математическое отрицание.</p> - -<h3 id="Syntax_8" name="Syntax_8">Синтаксис</h3> - -<pre class="syntaxbox"><strong>Оператор:</strong> -x -</pre> - -<h3 id="Examples_8" name="Examples_8">Примеры</h3> - -<pre class="brush: js">var x = 3; -y = -x; // y = -3, x = 3 -</pre> - -<h2 id="Унарный_плюс"><a name="Unary_plus">Унарный плюс</a> (+)</h2> - -<p>Оператор унарный плюс предшедствует своему операнду и оценивает его, пытается преобразовать его в число, если он им не является. Хотя, унарное отрицание (-) также конвертирует не числа, унарный плюс - быстрейший и предпочитаемый способ конвертирования чего-либо в число потому, что он не выполняет каких-либо операций с числом. Он может конвертировать строковые представления целых и чисел с плавающей точкой, а также нестроковые значения <code>true</code>, <code>false</code> и <code>null</code>. Поддерживаются числа в десятичном и шестнадцатиричном (с префиксом "0x") формате. Отрицательные числа тоже поддерживаются (но не 16-ричные). Если он не может вычислить конкретное значение, выполнится как <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/NaN">NaN</a>.</p> - -<h3 id="Syntax_9" name="Syntax_9">Синтаксис</h3> - -<pre class="syntaxbox"><strong>Оператор:</strong> +x -</pre> - -<h3 id="Examples_9" name="Examples_9">Примеры</h3> - -<pre class="brush: js">+3 // 3 -+"3" // 3 -+true // 1 -+false // 0 -+null // 0 -</pre> - -<h2 id="Specifications" name="Specifications">Спецификации</h2> - -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Спецификация</th> - <th scope="col">Статус</th> - <th scope="col">Примечание</th> - </tr> - <tr> - <td>{{SpecName('ES1')}}</td> - <td>{{Spec2('ES1')}}</td> - <td>Изначальное определение</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">Additive operators</a>, <a href="http://www.ecma-international.org/ecma-262/5.1/#sec-11.5">Multiplicative operators</a>, <a href="http://www.ecma-international.org/ecma-262/5.1/#sec-11.3">Postfix expressions</a>, <a href="http://www.ecma-international.org/ecma-262/5.1/#sec-11.4">Unary operators</a>.</td> - </tr> - <tr> - <td>{{SpecName('ES6', '#sec-postfix-expressions')}}</td> - <td>{{Spec2('ES6')}}</td> - <td>Определено в нескольких секциях специфии: <a href="http://www.ecma-international.org/ecma-262/6.0/#sec-additive-operators">Additive operators</a>, <a href="http://www.ecma-international.org/ecma-262/6.0/#sec-multiplicative-operators">Multiplicative operators</a>, <a href="http://www.ecma-international.org/ecma-262/6.0/#sec-postfix-expressions">Postfix expressions</a>, <a href="http://www.ecma-international.org/ecma-262/6.0/#sec-unary-operators">Unary operators</a>.</td> - </tr> - <tr> - <td>{{SpecName('ES7', '#sec-postfix-expressions')}}</td> - <td>{{Spec2('ES7')}}</td> - <td>Добавлен <a href="https://github.com/rwaldron/exponentiation-operator">Оператор возведения в степень</a>.</td> - </tr> - <tr> - <td>{{SpecName('ESDraft', '#sec-postfix-expressions')}}</td> - <td>{{Spec2('ESDraft')}}</td> - <td></td> - </tr> - </tbody> -</table> - -<h2 id="Поддержка_браузерами">Поддержка браузерами</h2> - - - -<p>{{Compat("javascript.operators.arithmetic")}}</p> - -<h2 id="See_also" name="See_also">Смотрите также</h2> - -<ul> - <li><a href="/ru/docs/Web/JavaScript/Reference/Operators/Assignment_Operators">Операторы присваивания</a></li> -</ul> diff --git a/files/ru/web/javascript/reference/operators/присваивание/index.html b/files/ru/web/javascript/reference/operators/assignment/index.html index 0517dc2ccd..bbafec1afa 100644 --- a/files/ru/web/javascript/reference/operators/присваивание/index.html +++ b/files/ru/web/javascript/reference/operators/assignment/index.html @@ -1,6 +1,6 @@ --- title: Присваивание (=) -slug: Web/JavaScript/Reference/Operators/Присваивание +slug: Web/JavaScript/Reference/Operators/Assignment tags: - Assignment operator - JavaScript @@ -12,6 +12,7 @@ tags: - "Особенность\_языка" - справочник translation_of: Web/JavaScript/Reference/Operators/Assignment +original_slug: Web/JavaScript/Reference/Operators/Присваивание --- <div>{{jsSidebar("Operators")}}</div> diff --git a/files/ru/web/javascript/reference/operators/assignment_operators/index.html b/files/ru/web/javascript/reference/operators/assignment_operators/index.html deleted file mode 100644 index 5399324df0..0000000000 --- a/files/ru/web/javascript/reference/operators/assignment_operators/index.html +++ /dev/null @@ -1,431 +0,0 @@ ---- -title: Операторы присваивания -slug: Web/JavaScript/Reference/Operators/Assignment_Operators -tags: - - JavaScript - - Оператор -translation_of: Web/JavaScript/Reference/Operators#Assignment_operators -translation_of_original: 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> diff --git a/files/ru/web/javascript/reference/operators/bitwise_operators/index.html b/files/ru/web/javascript/reference/operators/bitwise_operators/index.html deleted file mode 100644 index ba4703c2c3..0000000000 --- a/files/ru/web/javascript/reference/operators/bitwise_operators/index.html +++ /dev/null @@ -1,626 +0,0 @@ ---- -title: Битовые операции -slug: Web/JavaScript/Reference/Operators/Bitwise_Operators -tags: - - JavaScript - - Оператор -translation_of: Web/JavaScript/Reference/Operators -translation_of_original: Web/JavaScript/Reference/Operators/Bitwise_Operators ---- -<div>{{jsSidebar("Operators")}}</div> - -<h2 id="Summary" name="Summary">Сводка</h2> - -<p>Битовые операции обращаются со своими операндами как с 32-х разрядными последовательностями нулей и единиц, а не как с десятичными, восьмеричными или шестнадцатиричными числами. К примеру десятичное число 9 в двоичном представлении будет выглядеть как 1001. Битовые операции производят свои преобразования именно с двоичным представлением числа, но возвращают стандартные числовые значения языка JavaScript.</p> - -<table class="fullwidth-table"> - <tbody> - <tr> - <td class="header" colspan="2">Операторы</td> - </tr> - <tr> - <td>Реализованы в:</td> - <td>JavaScript 1.0</td> - </tr> - <tr> - <td>Версия ECMA:</td> - <td>ECMA-262</td> - </tr> - </tbody> -</table> - -<p>Следующая таблица содержит сводные данные о битовых операциях в JavaScript:</p> - -<table class="fullwidth-table"> - <tbody> - <tr> - <th>Оператор</th> - <th>Использование</th> - <th>Описание</th> - </tr> - <tr> - <td>Побитовое И</td> - <td style="white-space: nowrap;"><code>a & b</code></td> - <td>Возвращает 1 в тех разрядах, которые у обоих операндов были равны 1.</td> - </tr> - <tr> - <td>Побитовое ИЛИ</td> - <td style="white-space: nowrap;"><code>a | b</code></td> - <td>Возвращает 1 в тех разрядах, которые хотя бы у одного из операндов были равны 1.</td> - </tr> - <tr> - <td>Побитовое исключающее ИЛИ</td> - <td style="white-space: nowrap;"><code>a ^ b</code></td> - <td>Возвращает 1 в тех позициях, которые только у одного из операндов были равны 1.</td> - </tr> - <tr> - <td>Побитовое НЕ</td> - <td style="white-space: nowrap;"><code>~ a</code></td> - <td>Инвертирует биты операнда.</td> - </tr> - <tr> - <td>Сдвиг влево</td> - <td style="white-space: nowrap;"><code>a << b</code></td> - <td>Сдвигает двоичное представление числа a на b разрядов влево заполняя освободившиеся справа разряды нулями.</td> - </tr> - <tr> - <td>Арифметический сдвиг вправо</td> - <td style="white-space: nowrap;"><code>a >> b</code></td> - <td>Сдвигает двоичное представление числа a на b разрядов вправо. Освобождающиеся разряды заполняются знаковым битом.</td> - </tr> - <tr> - <td>Логический сдвиг вправо</td> - <td style="white-space: nowrap;"><code>a >>> b</code></td> - <td>Сдвигает двоичное представление числа a на b разрядов вправо. Освобождающиеся разряды заполняются нулями.</td> - </tr> - </tbody> -</table> - -<h3 id="Signed_32-bit_integers" name="Signed_32-bit_integers">Представление чисел (Signed 32-bit integers)</h3> - -<p>Операнды всех битовых операций конвертируются в 32-х битовые целые со знаком представленные в дополнительном коде и с использованием порядка битов от "старшего к младшему". Порядок битов "от старшего к младшему" означает, что наиболее значимый бит (бит с наибольшим значением) находится слева если 32-х разрядное число представлено в виде горизонтальной линии (шкалы). Представление в дополнительном коде означает, что отрицательное значение числа (например 5 и -5) получается путем инвертирования числа (операция "побитовое НЕ", также известное как "обратный код") и прибавления к нему единицы.</p> - -<p>Возьмем, к примеру, число 314. Представим его в двоичном коде:</p> - -<pre class="eval">00000000000000000000000100111010 -</pre> - -<p>Следующая строка представляет собой его обратный код или ~314:</p> - -<pre class="eval">11111111111111111111111011000101 -</pre> - -<p>Прибавив к нему единицу, мы получаем двоичное представление числа -314, оно же 314 в дополнительном коде:</p> - -<pre class="eval">11111111111111111111111011000110</pre> - -<p>Дополнение до 2-х гарантирует нам, что у положительного числа самый левый бит равен 0, в то время как у отрицательного он равен 1. Он зовется <em>знаковым битом</em>.</p> - -<p><br> - Число 0 есть число, у которого во ввсех битовых позициях записаны нули.</p> - -<pre class="line-numbers language-html"><code class="language-html">0 (base 10) = 00000000000000000000000000000000 </code></pre> - -<p>Число -1 есть число, у которого во всех битовых позициях записаны единицы.</p> - -<pre class="line-numbers language-html"><code class="language-html">-1 (base 10) = 11111111111111111111111111111111 </code></pre> - -<p>Число <code>-2147483648</code> (в шестнадцатиричной системе счисления: <code>-0x80000000</code>) - это вещественное число, которое состоит только из 0, заисключением самого первого слева, который есть 1 (отвечает за знак числа).</p> - -<pre class="line-numbers language-html"><code class="language-html">-2147483648 (base 10) = 10000000000000000000000000000000</code></pre> - -<p>Число <code>2147483648</code> (в шестнадцатиричной системе счисления: <code>0x80000000</code>) - это вещественное число, которое состоит только из 1, заисключением самого первого слева, который есть 0 (отвечает за знак числа).</p> - -<pre class="line-numbers language-html"><code class="language-html">2147483647 (base 10) = 01111111111111111111111111111111</code></pre> - -<p><code>-2147483648 и 2147483647 - это самое минимальное и самое максимальное числа, которые можно представить в 32 разрядной ячейке памяти.</code></p> - -<h2 id="Bitwise_logical_operators" name="Bitwise_logical_operators">Побитовые логические операции</h2> - -<p>Побитовые логические операции работают следующим образом:</p> - -<ul> - <li>Операнды конвертируются в 32-х битовые числа отображаемые последовательностью нулей и единиц. Числа более 32-х бит теряют свои старшие биты. Например:</li> -</ul> - -<pre class="line-numbers language-html"><code class="language-html">До: 11100110111110100000000000000110000000000001 -После: 10100000000000000110000000000001</code> -</pre> - -<ul> - <li>Каждый бит первого операнда считается парным соотвествующему биту второго операнда. Первый бит - первому, второй второму итд.</li> - <li>Операция применяется к каждой паре битов, and the result is constructed bitwise.</li> -</ul> - -<h3 id="_.28Bitwise_AND.29" name="&_.28Bitwise_AND.29">& (Побитовое AND)</h3> - -<p>Производит побитовое И над каждой парой битов. Операция <code>a</code> AND <code>b</code> веренет 1 если только и <code>a</code> и <code>b</code> равны 1. Таблица истинности для этой операции выглядит так:</p> - -<table class="standard-table"> - <tbody> - <tr> - <td class="header">a</td> - <td class="header">b</td> - <td class="header">a AND b</td> - </tr> - <tr> - <td>0</td> - <td>0</td> - <td>0</td> - </tr> - <tr> - <td>0</td> - <td>1</td> - <td>0</td> - </tr> - <tr> - <td>1</td> - <td>0</td> - <td>0</td> - </tr> - <tr> - <td>1</td> - <td>1</td> - <td>1</td> - </tr> - </tbody> -</table> - -<p>Пример:</p> - -<pre class="eval"> 9 (основание 10) = 00000000000000000000000000001001 (основание 2) - 14 (основание 10) = 00000000000000000000000000001110 (основание 2) - -------------------------------- -14 & 9 (основание 10) = 00000000000000000000000000001000 (осн. 2) = 8 (осн. 10) -</pre> - -<p>Побитовое AND любого числа x с нулем вернет 0.</p> - -<p>Побитовое AND любого числа x с числом -1 вернет х.</p> - -<h3 id="_.28Bitwise_OR.29" name="|_.28Bitwise_OR.29">| (Побитовое OR)</h3> - -<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1.7em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px;">Производит побитовое ИЛИ над каждой парой битов. Операция <code style="color: rgb(37, 34, 29); font-weight: inherit;">a</code> OR <code style="color: rgb(37, 34, 29); font-weight: inherit;">b</code> веренет 1 если <code style="color: rgb(37, 34, 29); font-weight: inherit;">a</code> или <code style="color: rgb(37, 34, 29); font-weight: inherit;">b</code> равны 1. Таблица истинности для этой операции выглядит так:</p> - -<table class="standard-table"> - <tbody> - <tr> - <td class="header">a</td> - <td class="header">b</td> - <td class="header">a OR b</td> - </tr> - <tr> - <td>0</td> - <td>0</td> - <td>0</td> - </tr> - <tr> - <td>0</td> - <td>1</td> - <td>1</td> - </tr> - <tr> - <td>1</td> - <td>0</td> - <td>1</td> - </tr> - <tr> - <td>1</td> - <td>1</td> - <td>1</td> - </tr> - </tbody> -</table> - -<pre class="eval">Пример: - -9 (осн. 10) = 00000000000000000000000000001001 (осн. 2) -14 (осн. 10) = 00000000000000000000000000001110 (осн. 2) - -------------------------------- -14 | 9 (осн. 10) = 00000000000000000000000000001111 (осн. 2) = 15 (осн. 10) -</pre> - -<p>Побитовое OR любого числа x c нулем вернет x.</p> - -<p>Побитовое OR любого числа x с числом -1 вернет -1.</p> - -<h3 id=".5E_.28Bitwise_XOR.29" name=".5E_.28Bitwise_XOR.29">^ (Побитовое XOR)</h3> - -<p>Производит побитовое XOR над каждой парой битов. Операция <code>a</code> XOR <code>b</code> вернет 1 если <code>a</code> и <code>b</code> различны. Таблица истинности для этой операции выглядит так:</p> - -<table class="standard-table"> - <tbody> - <tr> - <td class="header">a</td> - <td class="header">b</td> - <td class="header">a XOR b</td> - </tr> - <tr> - <td>0</td> - <td>0</td> - <td>0</td> - </tr> - <tr> - <td>0</td> - <td>1</td> - <td>1</td> - </tr> - <tr> - <td>1</td> - <td>0</td> - <td>1</td> - </tr> - <tr> - <td>1</td> - <td>1</td> - <td>0</td> - </tr> - </tbody> -</table> - -<p>Пример:</p> - -<pre class="eval"> 9 (осн. 10) = 00000000000000000000000000001001 (осн. 2) - 14 (осн. 10) = 00000000000000000000000000001110 (осн. 2) - -------------------------------- -14 ^ 9 (осн. 10) = 00000000000000000000000000000111 (осн. 2) = 7 (осн. 10) -</pre> - -<p>Побитовое XOR любого числа x c нулем вернет x.</p> - -<p>Побитовое XOR любого числа x c числом -1 вернет ~x.</p> - -<h3 id=".7E_.28Bitwise_NOT.29" name=".7E_.28Bitwise_NOT.29">~ (Побитовое NOT)</h3> - -<p>Производит операцию NOT над каждым битом. NOT <code>a</code> вернет побитово инвертированное значение (обратный код) операнда. Таблица истинности для этой операции выглядит так:</p> - -<table class="standard-table"> - <tbody> - <tr> - <td class="header">a</td> - <td class="header">NOT a</td> - </tr> - <tr> - <td>0</td> - <td>1</td> - </tr> - <tr> - <td>1</td> - <td>0</td> - </tr> - </tbody> -</table> - -<p>Пример:</p> - -<pre class="eval"> 9 (осн. 10) = 00000000000000000000000000001001 (осн. 2) - -------------------------------- -~9 (осн. 10) = 11111111111111111111111111110110 (осн. 2) = -10 (осн. 10) -</pre> - -<p>Побитовое NOT любого числа x вернет -(x + 1). Например, ~5 вернет -6.</p> - -<h2 id="Bitwise_shift_operators" name="Bitwise_shift_operators">Побитовые операции сдвига</h2> - -<p>Оператор побитового сдвига принимает в себя два операнда: первый - величина, которую сдвигают, второй - число позиций, на которое сдвигаются биты первого операнда. Направление сдвига зависит от используемого оператора.</p> - -<p>Операторы сдвига конвертируют операнды в 32-ух разрядные числа с порядком байтов от старшего к младшему, а результат возвращает того же типа, что и левый операнд.</p> - -<h3 id=".3C.3C_.28Left_shift.29" name=".3C.3C_.28Left_shift.29"><< (Сдвиг влево)</h3> - -<p>Оператор побитового сдвига влево сдвигает первый операнд на заданное число битов влево. Лишние биты отбрасываются.</p> - -<p>Например, <code>9 << 2</code> в результате даст 36:</p> - -<pre class="eval"> 9 (осн. 10): 00000000000000000000000000001001 (осн. 2) - -------------------------------- -9 << 2 (осн. 10): 00000000000000000000000000100100 (осн. 2) = 36 (осн. 10) - - -</pre> - -<p>Побитовй сдвиг любого числа <code>x</code> влево на <code>y</code> бит в результате дает <code>x * 2 ** y</code>.</p> - -<h3 id=".3E.3E_.28Sign-propagating_right_shift.29" name=".3E.3E_.28Sign-propagating_right_shift.29">>> (Сдвиг вправо с сохранением знака)</h3> - -<p>Оператор побитового сдвига вправо сдвигает первый операнд на заданное число битов вправо. Лишние биты отбрасываются. Слева добавляется заданное число битов равных первому биту исходного числа. Поскольку значение первого бита, определяющего знак числа, останется неизменным, знак получившегося результата будет таким же как у первого аргумента. Отсюда "с сохранением знака" в названи.</p> - -<p>Например, <code>9 >> 2</code> в результате даст 2:</p> - -<pre class="eval"> 9 (осн. 10): 00000000000000000000000000001001 (осн. 2) - -------------------------------- -9 >> 2 (осн. 10): 00000000000000000000000000000010 (осн. 2) = 2 (осн. 10) -</pre> - -<p>Аналогично, <code>-9 >> 2</code> даст в результате -3, так как знак сохранен:</p> - -<pre class="eval"> -9 (осн. 10): 11111111111111111111111111110111 (осн. 2) - -------------------------------- --9 >> 2 (осн. 10): 11111111111111111111111111111101 (осн. 2) = -3 (осн. 10) -</pre> - -<h3 id=".3E.3E_.28Sign-propagating_right_shift.29" name=".3E.3E_.28Sign-propagating_right_shift.29">>>> (Сдвиг вправо с заполнением нулями)</h3> - -<p>Оператор побитового сдвига вправо сдвигает первый операнд на заданное число битов вправо. Лишние биты отбрасываются. Слева добавляется заданное число нулевых битов. Поскольку значение первого бита, определяющего знак числа, становится нулевым, результатом операции всегда будет положительное число.</p> - -<p>Для положительных чисел, сдвиг вправо с сохранением знака и сдвиг вправо с заполнением нулями эквивалентны.</p> - -<p>Например, <code>9 >>> 2</code> дает в результате 2, как и <code>9 >> 2</code>:</p> - -<pre class="eval"> 9 (осн. 10): 00000000000000000000000000001001 (осн. 2) - -------------------------------- -9 >>> 2 (осн. 10): 00000000000000000000000000000010 (осн. 2) = 2 (осн. 10) -</pre> - -<p>Важно отметить, что для отрицательных результаты будут разными. Например, <code>-9 >>> 2</code> дает в результате 1073741821, что отличается от результата <code>-9 >> 2</code> (равно -3):</p> - -<pre class="eval"> -9 (осн. 10): 11111111111111111111111111110111 (осн. 2) - -------------------------------- --9 >>> 2 (осн. 10): 00111111111111111111111111111101 (осн. 2) = 1073741821 (осн. 10) -</pre> - -<h3 id="Examples" name="Examples">Примеры</h3> - -<h4 id="Example_Flags_and_bitmasks" name="Example:_Flags_and_bitmasks">Пример: флаги и битовые маски</h4> - -<p>Побитовые логические операторы часто используются для создания, обработки и чтения последовательности флагов, которые осуществляются также, как и двоичные переменные. Переменные могут быть использованы вместо этих последовательностей, но двоичные флаги занимают гораздо меньше памяти (в 32 разрядной ячейке памяти).</p> - -<p>Предположим, существует 4 флага:</p> - -<ul> - <li>флаг A: у нас есть проблема с муравьями</li> - <li>флаг B: у нас есть летучая мышь</li> - <li>флаг C: у нас есть кошка</li> - <li>флаг D: у нас есть утка</li> -</ul> - -<p>Эти флаги представлены последовательностью битов: DCBA. Считается, что флаг <em>установлен (the flag is set)</em>, если его значение равно 1. Флаг <em>сброшен (the flag is cleared)</em>, если его значение равно 0. Предположим, что переменная <code>flags</code> содержит двоичное значение 0101:</p> - -<pre class="eval">var flags = 0x5; // двоичное 0101 -</pre> - -<p>Из этого значения следует:</p> - -<ul> - <li>флаг A установлен (у нас есть проблема с муравьями);</li> - <li>флаг B сброшен (у нас нет летучей мыши);</li> - <li>флаг C установлен (у нас есть кошка);</li> - <li>флаг D сброшен (у нас нет утки);</li> -</ul> - -<p>Так как битовые операторы 32-битные, то 0101 в действительности представлено значением 00000000000000000000000000000101, но ведущие нули могут быть опущены, потому, что не содержат значимой информации.</p> - -<p><em>Битовая маска, </em>это последовательность битов, которая позволяет манипулировать и/или считывать значения флагов. Обычно для каждого флага задаётся "примитивная" битовая маска:</p> - -<pre class="eval">var FLAG_A = 0x1; // 0001 -var FLAG_B = 0x2; // 0010 -var FLAG_C = 0x4; // 0100 -var FLAG_D = 0x8; // 1000 -</pre> - -<p>New bitmasks can be created by using the bitwise logical operators on these primitive bitmasks. For example, the bitmask 1011 can be created by ORing FLAG_A, FLAG_B, and FLAG_D:</p> - -<pre class="eval">var mask = FLAG_A | FLAG_B | FLAG_D; // 0001 | 0010 | 1000 => 1011 -</pre> - -<p>Individual flag values can be extracted by ANDing them with a bitmask, where each bit with the value of one will "extract" the corresponding flag. The bitmask <em>masks</em> out the non-relevant flags by ANDing with zeros (hence the term "bitmask"). For example, the bitmask 0100 can be used to see if flag C is set:</p> - -<pre class="eval">// if we own a cat -if (flags & FLAG_C) { // 0101 & 0100 => 0100 => true - // do stuff -} -</pre> - -<p>A bitmask with multiple set flags acts like an "either/or". For example, the following two are equivalent:</p> - -<pre class="eval">// if we own a bat or we own a cat -if ((flags & FLAG_B) || (flags & FLAG_C)) { // (0101 & 0010) || (0101 & 0100) => 0000 || 0100 => true - // do stuff -} -</pre> - -<pre class="eval">// if we own a bat or cat -var mask = FLAG_B | FLAG_C; // 0010 | 0100 => 0110 -if (flags & mask) { // 0101 & 0110 => 0100 => true - // do stuff -} -</pre> - -<p>Flags can be set by ORing them with a bitmask, where each bit with the value one will set the corresponding flag, if that flag isn't already set. For example, the bitmask 1010 can be used to set flags C and D:</p> - -<pre class="eval">// yes, we own a cat and a duck -var mask = FLAG_C | FLAG_D; // 0100 | 1000 => 1100 -flags |= mask; // 0101 | 1100 => 1101 -</pre> - -<p>Flags can be cleared by ANDing them with a bitmask, where each bit with the value zero will clear the corresponding flag, if it isn't already cleared. This bitmask can be created by NOTing primitive bitmasks. For example, the bitmask 1010 can be used to clear flags A and C:</p> - -<pre class="eval">// no, we don't neither have an ant problem nor own a cat -var mask = ~(FLAG_A | FLAG_C); // ~0101 => 1010 -flags &= mask; // 1101 & 1010 => 1000 -</pre> - -<p>The mask could also have been created with <code>~FLAG_A & ~FLAG_C</code> (De Morgan's law):</p> - -<pre class="eval">// no, we don't have an ant problem, and we don't own a cat -var mask = ~FLAG_A & ~FLAG_C; -flags &= mask; // 1101 & 1010 => 1000 -</pre> - -<p>Flags can be toggled by XORing them with a bitmask, where each bit with the value one will toggle the corresponding flag. For example, the bitmask 0110 can be used to toggle flags B and C:</p> - -<pre class="eval">// if we didn't have a bat, we have one now, and if we did have one, bye-bye bat -// same thing for cats -var mask = FLAG_B | FLAG_C; -flags = flags ^ mask; // 1100 ^ 0110 => 1010 -</pre> - -<p>Finally, the flags can all be flipped with the NOT operator:</p> - -<pre class="eval">// entering parallel universe... -flags = ~flags; // ~1010 => 0101 - -</pre> - -<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="#Bitwise_NOT">Битовый NOT (<code>~</code>)</a></td> - <td>{{ CompatVersionUnknown() }}</td> - <td>{{ CompatVersionUnknown() }}</td> - <td>{{ CompatVersionUnknown() }}</td> - <td>{{ CompatVersionUnknown() }}</td> - <td>{{ CompatVersionUnknown() }}</td> - </tr> - <tr> - <td><a href="#Bitwise_AND">Битовый 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="#Bitwise_OR">Битовый 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="#Bitwise_XOR">Битовый XOR (<code>^</code>)</a></td> - <td>{{ CompatVersionUnknown() }}</td> - <td>{{ CompatVersionUnknown() }}</td> - <td>{{ CompatVersionUnknown() }}</td> - <td>{{ CompatVersionUnknown() }}</td> - <td>{{ CompatVersionUnknown() }}</td> - </tr> - <tr> - <td><a href="#Left_shift">Сдвиг влево (<code><<</code>)</a></td> - <td>{{ CompatVersionUnknown() }}</td> - <td>{{ CompatVersionUnknown() }}</td> - <td>{{ CompatVersionUnknown() }}</td> - <td>{{ CompatVersionUnknown() }}</td> - <td>{{ CompatVersionUnknown() }}</td> - </tr> - <tr> - <td><a href="#Right_shift">Сдвиг вправо (<code>>></code>)</a></td> - <td>{{ CompatVersionUnknown() }}</td> - <td>{{ CompatVersionUnknown() }}</td> - <td>{{ CompatVersionUnknown() }}</td> - <td>{{ CompatVersionUnknown() }}</td> - <td>{{ CompatVersionUnknown() }}</td> - </tr> - <tr> - <td><a href="#Unsigned_right_shift">Беззнаковый сдвиг вправо (<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="#Bitwise_NOT">Битовый NOT (<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="#Bitwise_AND">Битовый 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="#Bitwise_OR">Битовый 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="#Bitwise_XOR">Битовый XOR (<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="#Left_shift">Сдвиг влево (<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="#Right_shift">Сдвиг вправо (<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="#Unsigned_right_shift">Беззнаковый сдвиг вправо (<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="See_also" name="See_also">Смотрите также</h2> - -<ul> - <li><a class="external" href="http://ru.wikipedia.org/wiki/%D0%91%D0%B8%D1%82%D0%BE%D0%B2%D1%8B%D0%B5_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8" title="http://ru.wikipedia.org/wiki/Битовые_операции">Wikipedia Битовые операции</a></li> - <li><a class="external" href="http://ru.wikipedia.org/wiki/%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BE%D0%B4_(%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%87%D0%B8%D1%81%D0%BB%D0%B0)" title="http://ru.wikipedia.org/wiki/Дополнительный_код_(представление_числа)">Wikipedia Дополнительный код</a></li> - <li><a class="external" href="http://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BE%D0%B4_(%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%87%D0%B8%D1%81%D0%BB%D0%B0)" title="http://ru.wikipedia.org/wiki/Обратный_код_(представление_числа)">Wikipedia Обратный код</a></li> - <li><a href="/ru/docs/Web/JavaScript/Reference/Operators/Logical_Operators">Логические операции</a></li> -</ul> diff --git a/files/ru/web/javascript/reference/operators/оператор_запятая/index.html b/files/ru/web/javascript/reference/operators/comma_operator/index.html index 471c81ba88..85d739fdab 100644 --- a/files/ru/web/javascript/reference/operators/оператор_запятая/index.html +++ b/files/ru/web/javascript/reference/operators/comma_operator/index.html @@ -1,9 +1,10 @@ --- title: Оператор Запятая -slug: Web/JavaScript/Reference/Operators/Оператор_Запятая +slug: Web/JavaScript/Reference/Operators/Comma_Operator tags: - Оператор запятая translation_of: Web/JavaScript/Reference/Operators/Comma_Operator +original_slug: Web/JavaScript/Reference/Operators/Оператор_Запятая --- <div>{{jsSidebar("Operators")}}</div> diff --git a/files/ru/web/javascript/reference/operators/условный_оператор/index.html b/files/ru/web/javascript/reference/operators/conditional_operator/index.html index 344d7f21d9..facc7e671a 100644 --- a/files/ru/web/javascript/reference/operators/условный_оператор/index.html +++ b/files/ru/web/javascript/reference/operators/conditional_operator/index.html @@ -1,10 +1,11 @@ --- title: Условный (тернарный) оператор -slug: Web/JavaScript/Reference/Operators/Условный_оператор +slug: Web/JavaScript/Reference/Operators/Conditional_Operator tags: - JavaScript - Оператор translation_of: Web/JavaScript/Reference/Operators/Conditional_Operator +original_slug: Web/JavaScript/Reference/Operators/Условный_оператор --- <div>{{jsSidebar("Operators")}}</div> diff --git a/files/ru/web/javascript/reference/operators/группировка/index.html b/files/ru/web/javascript/reference/operators/grouping/index.html index ecc180ab21..0b504945a1 100644 --- a/files/ru/web/javascript/reference/operators/группировка/index.html +++ b/files/ru/web/javascript/reference/operators/grouping/index.html @@ -1,11 +1,12 @@ --- title: Оператор группировки -slug: Web/JavaScript/Reference/Operators/Группировка +slug: Web/JavaScript/Reference/Operators/Grouping tags: - JavaScript - Оператор - Основные выражения translation_of: Web/JavaScript/Reference/Operators/Grouping +original_slug: Web/JavaScript/Reference/Operators/Группировка --- <div>{{jsSidebar("Operators")}}</div> diff --git a/files/ru/web/javascript/reference/operators/конвейерный_оператор/index.html b/files/ru/web/javascript/reference/operators/pipeline_operator/index.html index fa43c6d346..ec069c9e24 100644 --- a/files/ru/web/javascript/reference/operators/конвейерный_оператор/index.html +++ b/files/ru/web/javascript/reference/operators/pipeline_operator/index.html @@ -1,6 +1,6 @@ --- title: Конвейерный оператор -slug: Web/JavaScript/Reference/Operators/Конвейерный_оператор +slug: Web/JavaScript/Reference/Operators/Pipeline_operator tags: - Experimental - JavaScript @@ -8,6 +8,7 @@ tags: - Оператор - Экспериментальный translation_of: Web/JavaScript/Reference/Operators/Pipeline_operator +original_slug: Web/JavaScript/Reference/Operators/Конвейерный_оператор --- <div>{{jsSidebar("Operators")}} {{SeeCompatTable}}</div> diff --git a/files/ru/web/javascript/reference/operators/логические_операторы/index.html b/files/ru/web/javascript/reference/operators/логические_операторы/index.html deleted file mode 100644 index b840f1e584..0000000000 --- a/files/ru/web/javascript/reference/operators/логические_операторы/index.html +++ /dev/null @@ -1,300 +0,0 @@ ---- -title: Логические операторы -slug: Web/JavaScript/Reference/Operators/Логические_операторы -translation_of: Web/JavaScript/Reference/Operators -translation_of_original: Web/JavaScript/Reference/Operators/Logical_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> diff --git a/files/ru/web/javascript/reference/operators/операторы_сравнения/index.html b/files/ru/web/javascript/reference/operators/операторы_сравнения/index.html deleted file mode 100644 index ee0565dc94..0000000000 --- a/files/ru/web/javascript/reference/operators/операторы_сравнения/index.html +++ /dev/null @@ -1,286 +0,0 @@ ---- -title: Операторы сравнения -slug: Web/JavaScript/Reference/Operators/Операторы_сравнения -tags: - - JavaScript - - Операторы -translation_of: Web/JavaScript/Reference/Operators -translation_of_original: Web/JavaScript/Reference/Operators/Comparison_Operators ---- -<div>{{jsSidebar("Operators")}}</div> - -<p>В JavaScript имеются как строгие сравнения, так и сравнения с преобразованием типа операндов. Строгие сравнения (к примеру, ===) истинны только в том случае, если типы сравниваемых значений являются одинаковыми (к примеру: string-string, number-number). Однако, чаще используются сравнения с преобразованием типов (к примеру, ==). Такой тип сравнения, перед тем как непосредственно выполнить сравнение, приводит операнды к одному типу. В случае же абстрактного реляционного сравнения, операнды сперва преобразуются в примитивы, затем приводятся к одному типу, и только после этого сравниваются.</p> - -<p>Строки сравниваются на основе стандартного лексикографического упорядочения, используя значения Unicode.</p> - -<p>Особенности сравнений:</p> - -<ul> - <li>Две строки строго равны только в том случае, если они имеют одинаковую длину, и те же символы в одинаковой последовательности и соответствующих позициях.</li> - <li>Два числа строго равны в том случае, если они численно равны. <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/NaN" title="NaN">NaN</a> не равно ничему, в том числе и NaN. Нули с положительным и отрицательным знаком равны.</li> - <li>Два логических значения (boolean) равны только в том случае, если они оба <code>истинны (true)</code> или <code>ложны (false</code>).</li> - <li>Два различных объекта никогда не равны как в строгих, так и в абстрактных сравнениях.</li> - <li>Сравнение объекта истинно лишь в том случае, если оба операнда ссылаются на один и тот же объект в памяти.</li> - <li>Виды <code>null</code> и <code>undefined</code> равны себе как в строгом сравнении, так и в абстрактном.</li> -</ul> - -<p><strong>При использовании сравнения с преобразованием типов, следует быть крайне осторожным, так как это может привести к непредвиденным проблемам, связанным с особенностями конвертации различных типов (см. параграф "Использование операторов равенства").</strong></p> - -<h2 id="Операторы_равенства">Операторы равенства</h2> - -<h3 id="Равно"><a name="Equality">Равно (==)</a></h3> - -<p><em>Оператор равно</em> сначала приводит операнды к одному типу, и затем применяет строгое сравнение. Если оба операнда являются объектами, то JavaScript сравнивает внутренние ссылки, которые равны в том случае, если они ссылаются на один и тот же объект в памяти.</p> - -<h4 id="Синтаксис">Синтаксис</h4> - -<pre class="syntaxbox notranslate">x == y -</pre> - -<h4 id="Примеры">Примеры</h4> - -<pre class="brush: js notranslate"> 1 == 1 // истина -"1" == 1 // истина - 1 == '1' // истина - 3 == 5 // ложь - 0 == false // истина -"foo" == "bar" // ложь -</pre> - -<h3 id="Не_равно_!"><a name="Inequality">Не равно (!=)</a></h3> - -<p><em>Оператор не равно</em> возвращает <code>true</code> в том случае, если операнды не равны.<em>Он </em>аналогичен оператору равенства, перед сравнением приводит операнды к одному типу. В случае если оба операнда являются объектами, JavaScript сравнивает внутренние ссылки, которые не равны в том случае, если относятся к разным объектам в памяти.</p> - -<h4 id="Синтаксис_2">Синтаксис</h4> - -<pre class="syntaxbox notranslate">x != y</pre> - -<h4 id="Примеры_2">Примеры</h4> - -<pre class="brush: js notranslate">1 != 2 // истина -1 != "1" // ложь -1 != '1' // ложь -1 != true // ложь -0 != false // ложь -"foo" != "bar" // истина -</pre> - -<h3 id="Строго_равно"><a name="Identity">Строго равно (===)</a></h3> - -<p>Оператор возвращает истину в том случае, если операнды строго равны (см. выше). В отличие от <em>оператора равно</em>, данный оператор <strong>не приводит операнды к одному типу.</strong></p> - -<h4 id="Синтаксис_3">Синтаксис</h4> - -<pre class="syntaxbox notranslate">x === y</pre> - -<h4 id="Примеры_3">Примеры</h4> - -<pre class="brush: js notranslate">3 === 3 // истина -3 === '3' // ложь -'foo' === 'foo' // истина -</pre> - -<h3 id="Строго_не_равно_!"><a name="Nonidentity">Строго не равно (!==)</a></h3> - -<p><em>Оператор строго не равно </em>возвращает истину в том случае, <strong>если операнды не равны, или их типы отличаются друг от друга.</strong></p> - -<h4 id="Синтаксис_4">Синтаксис</h4> - -<pre class="syntaxbox notranslate">x !== y</pre> - -<h4 id="Примеры_4">Примеры</h4> - -<pre class="brush: js notranslate">3 !== '3' // истина -4 !== 3 // истина -</pre> - -<h2 id="Операторы_сравнения">Операторы сравнения</h2> - -<h3 id="Больше_>"><a name="Greater_than_operator">Больше (>)</a></h3> - -<p><em>Оператор больше</em> возвращает истину в том случае, если значение левого операнда больше, чем правого.</p> - -<h4 id="Синтаксис_5">Синтаксис</h4> - -<pre class="syntaxbox notranslate">x > y</pre> - -<h4 id="Примеры_5">Примеры</h4> - -<pre class="brush: js notranslate">4 > 3 // истина -1 > 5 // ложь -</pre> - -<h3 id="Больше_или_равно_>"><a name="Greater_than_or_equal_operator">Больше или равно (>=)</a></h3> - -<p><em>Оператор больше или равно, </em>возвращает истину в том случае, если значение операнда слева больше или равно значению операнда справа.</p> - -<h4 id="Синтаксис_6">Синтаксис</h4> - -<pre class="syntaxbox notranslate"> x >= y</pre> - -<h4 id="Примеры_6">Примеры</h4> - -<pre class="brush: js notranslate">4 >= 3 // истина -3 >= 3 // истина -</pre> - -<h3 id="Меньше<"><a name="Less_than_operator">Меньше(<)</a></h3> - -<p><em>Оператор меньше, </em>возвращает истину в том случае, если значение операнда слева меньше, чем значение операнда справа.</p> - -<h4 id="Синтаксис_7">Синтаксис</h4> - -<pre class="syntaxbox notranslate"> x < y</pre> - -<h4 id="Примеры_7">Примеры</h4> - -<pre class="brush: js notranslate">3 < 4 // истина -5 < 2 // ложь -</pre> - -<h3 id="Меньше_или_равно_<"><a id="Less_than_or_equal_operator" name="Less_than_or_equal_operator">Меньше или равно (<=)</a></h3> - -<p><em>Оператор меньше или равно, </em>возвращает истину в том случае, если значение операнда слева меньше, или равно значению операнда справа.</p> - -<h4 id="Синтаксис_8">Синтаксис</h4> - -<pre class="syntaxbox notranslate"> x <= y</pre> - -<h4 id="Примеры_8">Примеры</h4> - -<pre class="brush: js notranslate">3 <= 4 // истина -3 <= 3 // истина -</pre> - -<h2 id="Использование_операторов_равенства">Использование операторов равенства</h2> - -<p>Стандартные операции равенства с преобразованием типов (<code>==</code> и <code>!=</code>) используют <a href="http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3">Абстрактный Алгоритм Эквивалентного Сравнения</a> для сравнения двух операндов. Если у операндов различные типы, то JavaScript пытается привести их к одному типу, перед тем как сравнивать их. К примеру, в выражении <code>5 == '5'</code>, строка справа конвертируется в число, и только потом сравнивается.</p> - -<p><em>Операторы строгого равентсва</em> (<code>===</code> и <code>!==</code>) используют Строгий Алгоритм Эквивалентного Сравнения, и предназначены для сравнения операндов одного типа. <strong>Если операнды имеют разные типы, то результат операции сравнения всегда будет ложью.</strong> К примеру, выражение <code>5 !== '5'</code> будет истинным.</p> - -<p>Используйте <em>операторы строгого равенства</em> в тех случаях, когда необходимо проверять не только значения операндов, но так же и их типы. Во противном случае, используйте операторы стандартного равенства, которые позволяют сравнить два операнда вне зависимости от их типов.</p> - -<p>Когда происходит преобразование типов (т.е в случаях использования нестрогого сравнения), JavaScript преобразует типы String, Number, Boolean и Object, следующим образом:</p> - -<ul> - <li>При сравнении числа <code>(Number)</code> и строки <code>(String)</code>, JavaScript пытается преобразовать числовой литерал строки в число. Затем полученное число округляется до ближайшего возможного значения типа <code>Number</code>.</li> - <li>Если один из операндов является логическим <code>(Boolean)</code>, то он преобразуется в значение типа <code>(Number)</code>. <strong>Если значение логического операнда равняется истине <code>(true)</code>, то значение этого операнда преобразуется в 1. Иначе - в 0 <code>(ложь / false)</code>.</strong></li> - <li>Если объект сравнивается с числом или строкой, JavaScript пытается получить значение по умолчанию для данного объекта. Полученное значение преобразуется в примитив, посредством методов <strong><code>valueOf()</code></strong> и <strong><code>toString()</code></strong>. Если преобразовать объект не удается, генерируется ошибка времени выполнения.</li> - <li>Обратите внимание на то, что объект преобразуется в примитив, если, и только если, второй операнд является примитивом. В ином случае, операнды сравниваются как объекты, соответственно, операция сравнения вернет истину в том случае, если внутренние ссылки обоих объектов ссылаются на один и тот же объект в памяти.</li> -</ul> - -<div class="note"><strong>Внимание:</strong> Объекты String имеют тип Object, а не String. Такие объекты используются редко, так что следующий код может вас сильно удивить.</div> - -<pre class="brush:js notranslate">// Истина, так как оба операнда имеют тип String -'foo' === 'foo' - -var a = new String('foo'); -var b = new String('foo'); - -// Ложь, так как операнды являются объектами, внутренние ссылки которых, ссылаются на разные объекты в памяти -a == b - -// Ложь, так как операнды являются объектами, внутренние ссылки которых, ссылаются на разные объекты в памяти -a === b - -// Истина, так как объект a (String) будет преобразован в строку 'foo', перед сопоставлением -a == 'foo' </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('ES1')}}</td> - <td>{{Spec2('ES1')}}</td> - <td>Появление в спецификации. Выполняется в JavaScript 1.0</td> - </tr> - <tr> - <td>{{SpecName('ES3')}}</td> - <td>{{Spec2('ES3')}}</td> - <td>Добавлены операторы <code>===</code> и <code>!==</code>. Выполняется в JavaScript 1.3</td> - </tr> - <tr> - <td>{{SpecName('ES5.1', '#sec-11.8')}}</td> - <td>{{Spec2('ES5.1')}}</td> - <td>Определено в нескольких секциях спецификации: <a href="http://www.ecma-international.org/ecma-262/5.1/#sec-11.8">Относительные операторы</a>, <a href="http://www.ecma-international.org/ecma-262/5.1/#sec-11.9">Операторы равенства</a></td> - </tr> - <tr> - <td>{{SpecName('ES6', '#sec-relational-operators')}}</td> - <td>{{Spec2('ES6')}}</td> - <td>Определено в нескольких секциях спецификации: <a href="http://www.ecma-international.org/ecma-262/5.1/#sec-11.8">Относительные операторы</a>, <a href="http://www.ecma-international.org/ecma-262/5.1/#sec-11.9">Операторы равенства</a></td> - </tr> - <tr> - <td>{{SpecName('ESDraft', '#sec-relational-operators')}}</td> - <td>{{Spec2('ESDraft')}}</td> - <td>Определено в нескольких секциях спецификации: <a href="http://www.ecma-international.org/ecma-262/5.1/#sec-11.8">Относительные операторы</a>, <a href="http://www.ecma-international.org/ecma-262/5.1/#sec-11.9">Операторы равенства</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>Базовая поддержка</td> - <td>{{CompatVersionUnknown}}</td> - <td>{{CompatVersionUnknown}}</td> - <td>{{CompatVersionUnknown}}</td> - <td>{{CompatVersionUnknown}}</td> - <td> - <p>{{CompatVersionUnknown}}</p> - </td> - </tr> - </tbody> -</table> -</div> - -<div id="compat-mobile"> -<table class="compat-table" style="height: 73px; width: 1078px;"> - <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="Смотрите_также"><br> - Смотрите также</h2> - -<ul> - <li>{{jsxref("Object.is()")}}</li> - <li><a href="/ru/docs/Web/JavaScript/Equality_comparisons_and_sameness">Операторы сравнения и одинаковость</a></li> -</ul> |