JavaScript. Подробное руководство, 6-е издание, стр. 51

Ниже приводится более практичный пример использования инструкции

<b>switch</b>
; он преобразует значение в строку способом, зависящим от типа значения:

<b>// Преобразовать число в шестнадцатеричное целое</b>

<b>// Вернуть строку, заключенную в кавычки</b>

<b>// Любой другой тип преобразуется обычным способом</b>

<b>function convert(x) { </b>

<b>  switch(typeof х) { </b>

<b>  case ’number':</b>

<b>    return x.toString(16); </b>

<b>  case 'string':</b>

<b>    return &quot;&quot; + x + &quot;&quot;; </b>

<b>  default:</b>

<b>    return x.toStringO</b>

<b>  }</b>

<b>}</b>

Обратите внимание, что в двух предыдущих примерах за ключевыми словами

<b>case</b>
следовали числа или строковые литералы. Именно так инструкция
<b>switch</b>
чаще всего используется на практике, но стандарт ECMAScript позволяет указывать после
<b>case</b>
произвольные выражения.

Инструкция

<b>switch</b>
сначала вычисляет выражение после ключевого слова
<b>switch</b>
, а затем выражения
<b>case</b>
в том порядке, в котором они указаны, пока не будет найдено совпадающее значение. [4] Факт совпадения определяется с помощью оператора идентичности
<b>===</b>
, а не с помощью оператора равенства
<b>==</b>
, поэтому выражения должны совпадать без какого-либо преобразования типов.

Поскольку при каждом выполнении инструкции

<b>switch</b>
вычисляются не все выражения
<b>case</b>
, следует избегать использования выражений
<b>case</b>
, имеющих побочные эффекты, такие как вызовы функций и присваивания. Безопаснее всего ограничиваться в выражениях
<b>case</b>
константными выражениями.

Как объяснялось ранее, если ни одно из выражений

<b>case</b>
не соответствует выражению
<b>switch</b>
, инструкция
<b>switch</b>
начинает выполнение с инструкции с меткой
<b>default:</b>
. Если метка
<b>default:</b>
отсутствует, тело инструкции
<b>switch</b>
полностью пропускается. Обратите внимание, что в предыдущих примерах метка
<b>default:</b>
указана в конце тела инструкции
<b>switch</b>
после всех меток
<b>case</b>
. Это логичное и обычное место для нее, но на самом деле она может располагаться в любом месте внутри инструкции
<b>switch</b>
.

5.5. Циклы

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

<b>while, do/while, for</b>
и
<b>for/in</b>
. Каждому из них посвящен один из следующих подразделов. Одно из обычных применений инструкций циклов - обход элементов массива. Эта разновидность циклов подробно обсуждается в разделе 7.6, где также рассматриваются специальные методы итераций класса
<b>Array</b>
.

5.5.1. Инструкция while

Инструкция

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

<b>while (выражение) инструкция</b>

Инструкция

<b>while</b>
начинает работу с вычисления выражения. Если это выражение имеет ложное значение, интерпретатор пропускает инструкцию, составляющую тело цикла, и переходит к следующей инструкции в программе. Если выражение имеет истинное значение, то выполняется инструкция, образующая тело цикла, затем управление передается в начало цикла и выражение вычисляется снова. Иными словами, интерпретатор снова и снова выполняет инструкцию тела цикла, пока (
<b>while</b>
) значение выражения остается истинным. Обратите внимание, что имеется возможность организовать бесконечный цикл с помощью синтаксиса
<b>while(true).</b>

Обычно не требуется, чтобы интерпретатор JavaScript снова и снова выполнял одну и ту же операцию. Почти в каждом цикле с каждой итерацией цикла одна или несколько переменных изменяют свои значения. Поскольку переменная меняется, действия, которые выполняет инструкция, при каждом проходе тела цикла могут отличаться. Кроме того, если изменяемая переменная (или переменные) присутствует в выражении, значение выражения может меняться при каждом проходе цикла. Это важно, т. к. в противном случае выражение, значение которого было истинным, никогда не изменится и цикл никогда не завершится! Ниже приводится пример цикла

<b>while</b>
, который выводит числа от 0 до 9:

<b>var count = 0;</b>

<b>while (count &lt; 10) { </b>

<b>  console.log(count);</b>

<b>  count++;</b>

<b>}</b>

Как видите, в начале переменной

<b>count</b>
присваивается значение 0, а затем ее значение увеличивается каждый раз, когда выполняется тело цикла. После того как цикл будет выполнен 10 раз, выражение вернет
<b>false</b>
(т.е. переменная count уже не меньше 10), инструкция
<b>while</b>
завершится и интерпретатор перейдет к следующей инструкции в программе. Большинство циклов имеют переменные-счетчики, аналогичные
<b>count</b>
. Чаще всего в качестве счетчиков цикла выступают переменные с именами i, j и k, хотя для того чтобы сделать программный код более понятным, следует давать счетчикам более наглядные имена.