Циклы (круговое выполнение кода)




Послание по JS № 4

Логические выражения (и, или, не)

Логические операторы && (и), || (или),! (не) используются для выполнения операций булевой алгебры и часто применяются в сочетании с операторами отношений для объединения двух выражений отношений в одно более сложное выражение.

Логическое И (&&)

Свою работу оператор начинает с вычисления первого операнда – выражения слева.

Если выражение слева возвращает ложное значение, значением всего выражения также должно быть ложное значение, поэтому оператор && просто возвращает значение слева и не вычисляет выражение справа. В противном случае, если значение слева является истинным, тогда результат всего выражения определяется значением справа.

Если значение справа является истинным, значением всего выражения также должно быть истинное, а если значение справа является ложным, значением всего выражения ложное значение. Поэтому, когда значение слева является истинным, оператор && вычисляет и возвращает значение справа:

let i = NaN;

i = i && 5; // в переменную возвращается значение NaN, потому что NaN в логическом типе это — false

Так же оператор && часто используется для объединения двух выражений отношений:

x == 0 && y == 0 // true то­гда и толь­ко то­гда, ко­гда x и y рав­ны 0

Когда в операции участвуют логические операнды, оператор && выполняет операцию «логическое И» над двумя значениями: он возвращает true тогда и только тогда, когда оба операнда имеют значение true. Если один или оба операнда имеют значение false, оператор возвращает false.

Операторы отношений имеют более высокий приоритет, чем оператор && (и ||), поэтому такие выражения можно записывать без использования скобок.

Важно понимать, что оператор && может не вычислять выражение правого операнда.

Иногда можно встретить программный код, в котором поведение оператора && используется специально для выполнения инструкций по условию. Например, следующие две строки дают одинаковый результат:

if (a == b) stop(); // Функ­ция stop() вы­зы­ва­ет­ся, толь­ко ес­ли a == b

(a == b) && stop(); // То же са­мое

В целом следует с осторожностью использовать выражения с побочными эффектами (присваивания, инкременты, декременты или вызовы функций) справа от оператора &&, потому что эти побочные эффекты будут проявляться в зависимости от значения слева.

Несмотря на довольно запутанный алгоритм работы этого оператора, проще всего и абсолютно безопасно рассматривать его как оператор булевой алгебры, который манипулирует истинными и ложными значениями.

Логическое ИЛИ (||)

Оператор || выполняет операцию «логическое ИЛИ» над двумя операндами. Если один или оба операнда имеют истинное значение, он возвращает истинное значение. Если оба операнда имеют ложные значения, он возвращает ложное значение.

Хотя оператор || чаще всего применяется просто как оператор «логическое ИЛИ», он, как и оператор &&, ведет себя более сложным образом.

Его работа начинается с вычисления первого операнда, выражения слева. Если значение этого операнда является истинным, возвращается истинное значение. В противном случае оператор вычисляет второй операнд, выражение справа, и возвращает значение этого выражения.

Как и при использовании оператора &&, следует избегать правых операндов, имеющих побочные эффекты, если только вы умышленно не хотите воспользоваться тем обстоятельством, что выражение справа может не вычисляться.

Характерное использование этого оператора заключается в том, что он выбирает первое истинное значение из предложенного множества альтернатив:

// Ес­ли пе­ре­мен­ная max_width оп­ре­де­ле­на, ис­поль­зу­ет­ся ее зна­че­ние. В про­тив­ном слу­чае зна­че­ние из­вле­ка­ет­ся из объ­ек­та preferences. Ес­ли объ­ект (или его свой­ст­во max_with) не оп­ре­де­лен, ис­поль­зу­ет­ся зна­че­ние кон­стан­ты, же­ст­ко оп­ре­де­лен­ной в тек­сте про­грам­мы.

var max = max_width || preferences.max_width || 500;

Логическое НЕ (!)

Оператор! является унарным оператором, помещаемым перед одним операндом.

Он используется для инверсии логического значения своего операнда.

Например, если переменная x == true, то выражение !x возвращает значение false, и наоборот.

В отличие от операторов && и ||, оператор! преобразует свой операнд в логическое значение перед тем, как инвертировать его. Это означает, что оператор! всегда возвращает true или false, и это означает, что всегда можно преобразовать любое значение в его логический эквивалент, дважды применив этот оператор:!!.

Циклы (круговое выполнение кода)

Чтобы понять действие условных инструкций, мы представляли их в виде разветвлений на дороге, по которой двигается интерпретатор JavaScript. Инструкции циклов можно представить, как разворот на дороге, возвращающий обратно, который заставляет интерпретатор многократно проходить через один и тот же участок программного кода.

В языке JavaScript имеется несколько инструкции циклов: while, do/while, for и for/in. Мы будем говорить о первых 3, а 4 возьмем немного позже.

Инструкция цикла while

Инструкция if является базовой условной инструкцией в языке JS, а базовой инструкцией циклов можно считать инструкцию while. Она имеет следующий синтаксис:

while (вы­ра­же­ние) ин­ст­рук­ция;

Инструкция while начинает работу с вычисления вы­ра­же­ния.

Если это выражение имеет ложное значение, интерпретатор пропускает ин­ст­рук­цию, составляющую тело цикла, и переходит к следующей инструкции в программе.

Если вы­ра­же­ние имеет истинное значение, то выполняется ин­ст­рук­ция, образующая тело цикла, затем управление передается в начало цикла и вы­ра­же­ние вычисляется снова. Интерпретатор снова и снова будет выполнять ин­ст­рук­цию тела цикла, пока значение вы­ра­же­ния остается истинным.

Обратите внимание, что имеется возможность организовать бесконечный цикл —while(true).

Почти в каждом цикле с каждой итерацией цикла одна или несколько переменных изменяют свои значения. Ниже приводится пример цикла while, который выводит числа от 0 до 9:

var count = 0;

while (count < 10) {

console.log(count);

count++;

}

В начале, переменной count присваивается значение 0, а затем ее значение увеличивается каждый раз, когда выполняется тело цикла. После того как цикл будет выполнен 10 раз, выражение вернет false (т. е. переменная count уже не меньше 10), инструкция while завершится и интерпретатор перейдет к следующей инструкции в программе.

Большинство циклов имеют переменные-счетчики, аналогичные count. Чаще всего в качестве счетчиков цикла выступают переменные с именами i, j и k, хотя для того чтобы сделать программный код более понятным, следует давать счетчикам более наглядные имена.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2020-05-09 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: