Бинарные операторы javascript. Операторы JavaScript

Оглавление документа

JavaScript поддерживает компактный набор операторов, которые могут использоваться для создания интерактивных Web-страниц. В данной главе дан обзор этих операторов.

В этой главе имеются следующие разделы, предоставляющие краткий обзор каждого оператора:

  • Блок Операторов: { }
  • Условные Операторы: if...else и switch
  • Операторы Циклов: for, while, do...while, label, break и continue (label сам по себе не является оператором цикла, но часто используется с указанными операторами)
  • Операторы Манипуляции Объектами: for...in и with
  • Комментарии
  • Операторы Обработки Исключений: try...catch и throw
Любое выражение также является оператором. См. в Главе 3 в разделе «Выражения и Операции» полную информацию об операциях.

Используйте символ «точка с запятой» (;) для разделения операторов в коде JavaScript.

См. в книге Ядро JavaScript. Справочник. детали об операторах из этой главы.

1. Блок операторов Блок операторов используется для группирования операторов. Блок ограничен фигурными скобками:

{ statement1 statement2 . . . statementn }

2. Условные операторы Условный оператор является набором команд, которые выполняются, если специфицированное условие - true . JavaScript поддерживает два условных оператора: if...else и switch .2.1. Оператор if...else Этот оператор используется для выполнения определённых операторов, если логическое условие true ; используйте необязательный блок else для выполнения других операторов, если условие false . Оператор if выглядит так:

if (condition ) { statements1 } [ else { statements2 } ]

Условие может быть любым выражением JavaScript, вычисляемым в true или false . Выполняемые операторы могут быть любыми операторами JavaScript, включая вложенные операторы if . Если Вам нужно выполнить более одного оператора после операторов if или else , вы обязаны заключить эти выполняемые операторы в фигурные скобки {}.

Вы не должны использовать простые присвоения в условном операторе. Например, НЕ используйте такой код:

Если Вам нужно использовать присвоение в условном операторе, введите дополнительные скобки вокруг операции присвоения. Например, if((x = y)) .

Не путайте примитивные Boolean -значения true и false со значениями true и false объекта Boolean . Любой объект, чьё значение не undefined , null , zero , **NaN** или пустая строка, включая объект Boolean со значением false , вычисляется в true , когда передаётся условному оператору. Например:

var b = new Boolean (false ) ; if (b ) // это условие вычисляется в true

Пример .

В этом примере функция checkData возвращает true , если количество символов в Text -объекте равно трём; иначе, выводит предупреждение и возвращает false .

function checkData () { if (document . form1 . threeChar . value . length == 3 ) { return true } else { alert (" Enter exactly three characters. " + document . form1 . threeChar . value + " is not valid. " ) return false } }

2.2. Оператор switch Оператор switch позволяет программе вычислять выражение и пытается сопоставить значение выражения значению в метке case. Если совпадение найдено, программа выполняет ассоциированный оператор. Оператор switch выглядит так:

switch (expression ){ case label : statement ; break ; case label : statement ; break ; ... default : statement ; }

Программа сначала ищет label , совпадающий со значением expression , а затем выполняет ассоциированный statement/оператор. Если совпадающий label не найден, программа ищет необязательный default statement /оператор по умолчанию и, если он найден, выполняет ассоциированный оператор. Если default statement не найден, программа продолжает выполнять оператор, следующий после конца оператора switch .

Необязательный оператор break , ассоциированный с меткой case label , гарантирует, что программа прервёт выполнение оператора switch , как только будет выполнен оператор найденного совпадения, и продолжит выполнение с оператора, идущего после оператора switch . Если break отсутствует, программа продолжает выполнение следующего оператора внутри оператора switch .

Пример .

Здесь, если expr вычисляется в “Bananas” , программа находит совпадение с case “Bananas” и выполняет ассоциированный оператор. Если обнаружен break , программа прерывает switch и выполняет оператор после блока оператора switch . Если break отсутствует, оператор в case “Cherries” также будет выполнен.

switch (expr ) { case " Oranges " : document . write (" Oranges are $0.59 a pound.
" ) ; break ; case " Apples " : document . write (" Apples are $0.32 a pound.
" ) ; break ; case " Bananas " : document . write (" Bananas are $0.48 a pound.
" ) ; break ; case " Cherries " : document . write (" Cherries are $3.00 a pound.
" ) ; break ; default : document . write (" Sorry, we are out of " + i + " .
" ) ; } document . write (" Is there anything else you"d like?
" ) ;

3. Операторы циклов Цикл/loop это набор операторов, который выполняется несколько раз, пока выполняется специфицированное условие. JavaScript поддерживает циклические операторы for , do...while и while , а также label (label сам по себе не является оператором цикла, но часто используется с указанными операторами). Кроме того, вы можете использовать операторы break и continue внутри операторов циклов.

Ещё один оператор цикла, for...in , также выполняет свои операторы циклически, но используется для работы с объектами. См. Операторы Манипуляции Объектами.

3.1. Оператор for Цикл for повторяется до тех пор, пока специфицированное значение false . Цикл JavaScript for похож на циклы for Java и C. Оператор for выглядит так:

for ([ initialExpression ] ; [ condition ] ; [ incrementExpression ]) { statements }

Когда цикл for выполняется, происходит следующее:

1. Инициализирующее выражение initialЕxpression , если имеется, выполняется. Это выражение обычно инициализирует один или более счётчиков цикла, и синтаксис разрешает выражения любой сложности. Это выражение также может объявлять переменные.


2. Вычисляется выражение condition/условное. Если значение condition - true , выполняются statements/операторы цикла. Если значение condition - false , цикл for прекращает работу. Если выражение condition полностью отсутствует, принимается, что condition - true.


3. Выполняются statements.


4. Обновляющее выражение incrementExpression , если имеется, выполняется, и управление возвращается к Шагу 2.


Пример .

Эта функция содержит оператор for , который подсчитывает количество выбранных опций в прокручиваемом списке (объект Select , позволяющий выбрать несколько позиций). Оператор for объявляет переменную i и инициализирует её в нуль. Он проверяет, меньше ли i количества опций объекта Select , выполняет оператор if и инкремент переменной i на единицу после каждого прохода цикла.

function howMany(selectObject) { var numberSelected=0; for (var i=0; i < selectObject.options.length; i++) { if (selectObject.options[i].selected==true) numberSelected++; } return numberSelected; }

Choose some music types, then click the button below:
R&B Jazz Blues New Age Classical Opera

3.2. Оператор do...while Оператор do...while повторяется, пока специфицированное выражение - false. Оператор do...while выглядит так:

do { statement } while (condition )

statement выполняется один раз перед проверкой условия/condition. Если condition - true , оператор выполняется снова. В конце каждого выполнения condition проверяется. Если condition - false , выполнение останавливается и управление передаётся оператору после do...while .

Пример.

В этом примере цикл do итерируется минимум один раз и повторяет итерации, пока i меньше 5 .

do { i += 1 ; document . write (i ) ; } while (i < 5 ) ;

3.3. Оператор while Оператор while выполняет свои операторы, пока специфицированное condition/условие - true . Оператор while выглядит так:

while (condition ) { statements }

Если condition становится false , операторы внутри цикла прекращают выполняться и управление передаётся оператору, следующему после цикла.

Проверка условия/condition происходит до выполнения операторов внутри цикла. Если condition возвращает true , операторы выполняются и condition проверяется снова. Если condition возвращает false , выполнение цикла прекращается и управление передаётся оператору, идущему после оператора while .

Пример 1.

Этот цикл while итерирует, пока n меньше 3 :

n = 0 ; x = 0 ; while (n < 3 ) { n ++; x += n ; }

При каждой итерации цикл увеличивает n и прибавляет это значение к переменной x . Следовательно, x и n принимают следующие значения:

  • После первого прохода: n = 1 и x = 1
  • После второго прохода: n = 2 и x = 3
  • После третьего прохода: n = 3 и x = 6
После выполнения трёх проходов цикла, condition n < 3 больше не true, поэтому выполнение цикла прерывается.

Пример 2: Бесконечный цикл.

Убедитесь, что условие цикла когда-нибудь станет false ; иначе цикл никогда не прервётся. Операторы следующего цикла while выполняются бесконечно, поскольку условие никогда не станет false :

while (true ) { alert (" Hello, world " ) }

3.4. Оператор label Оператор label является идентификатором, на который можно ссылаться из любого места программы. Например, вы можете использовать label для идентификации цикла, а затем использовать операторы break или continue для прерывания цикла или продолжения выполнения.

Синтаксис оператора label выглядит так:

label : statement

Значением label может быть любой верный идентификатор JavaScript, не являющийся зарезервированным словом. Оператор/statement, идентифицируемый при помощи label , может быть любым оператором.

Пример.

В этом примере label markLoop идентифицирует цикл while .

markLoop : while (theMark == true ) doSomething () ; }

3.5. Оператор break Используйте оператор break для прерывания цикла switch или оператора с меткой label .
  • Если вы используете break без label , он немедленно прерывает ближайший содержащий while , do-while , for или switch и передаёт управление следующему оператору.
  • Если вы используете break с label , он прерывает специфицированный помеченный оператор.
Синтаксис оператора break таков:

1 . break 2 . break label

Первый вариант прерывает ближайший содержащий цикл или switch ; второй вариант прерывает специфицированный оператор, имеющий метку.

Пример .

Здесь выполняется итерация по элементам массива, пока не будет найден индекс элемента со значением theValue :

for (i = 0 ; i < a . length ; i ++ ) { if (a [ i ] = theValue ) break ; }

3.6. Оператор continue Оператор continue используется для рестарта операторов while , do-while , for и label .
  • Если вы используете continue без label , он прерывает текущую итерацию ближайшего цикла while, do-while или for и продолжает выполнение этого цикла со следующей итерации. В отличие от оператора break, continue не прерывает выполнение цикла полностью. В цикле while он переходит на condition . В цикле for на increment-expression .
  • Если вы используете continue с label , он применяется к оператору цикла, идентифицированному этим label .
Синтаксис оператора continue таков:

1 . continue 2 . continue label

Пример 1.

Это пример цикла while с оператором continue , который выполняется, если значение i равно 3 . Таким образом, n получает значения 1, 3, 7 и 12 .

i = 0 ; n = 0 ; while (i < 5 ) { i ++; if (i == 3 ) continue ; n += i ; }

Пример 2.

Оператор, помеченный как checkiandj , содержит оператор, помеченный как checkj . Если обнаружен continue , программа прерывает текущую итерацию checkj и начинает следующую итерацию. Каждый раз при обнаружении continue, checkj начинает итерацию вновь, пока его условие не возвратит false . Если возвращено false , выполняется оставшаяся часть оператора checkiandj и checkiandj реитерирует, пока его условие не возвратит false. Если возвращается false , программа продолжает выполняться с оператора, следующего после checkiandj .

Если continue имеет label для checkiandj , программа продолжит выполнение от начала оператора checkiandj .

checkiandj : while (i < 4 ) { document . write (i + "
" ) ; i += 1 ; checkj : while (j > 4 ) { document . write (j + "
" ) ; j -= 1 ; if ((j % 2 ) == 0 ) continue checkj ; document . write (j + " is odd.
" ) ; } document . write (" i = " + i + "
" ) ; document . write (" j = " + j + "
" ) ; }

4. Операторы манипуляции объектами JavaScript использует операторы for...in и with для манипулирования объектами.4.1. Оператор for...in Оператор for...in итерирует специфицированную переменную по всем свойствам объекта. Для каждого достигнутого свойства JavaScript выполняет специфицированные операторы. Оператор for...in выглядит так:

For (variable in object) {

Пример .

Эта функция принимает в качестве аргумента объект и имя объекта. Затем она итерирует по всем свойствам этого объекта и возвращает строку - список имён свойств и их значений.

function dump_props (obj , obj_name ) { var result = "" ; for (var i in obj ) { result += obj_name + " . " + i + " = " + obj [ i ] + "
" } result += " " ; return result ; }

Для объекта car со свойствами make и model результат будет таким:

car . make = Ford car . model = Mustang

4.2. Оператор with Оператор with устанавливает объект по умолчанию для набора блока операторов. JavaScript просматривает неквалифицированные имена внутри блока операторов и определяет, являются ли имена свойствами объекта по умолчанию. Если неквалифицированное имя является свойством, то это свойство используется в операторе; иначе, используется локальная или глобальная переменная.

Оператор with выглядит так:

with (object ){ statements }

Пример .

Здесь оператор with специфицирует, что объект Math является объектом по умолчанию. Операторы после оператора with обращаются к свойству PI и к методам cos и sin без специфицирования объекта. JavaScript принимает объект Math как объект для этих обращений.

var a , x , y ;; var r = 10 with (Math ) { a = PI * r * r ; x = r * cos (PI ) ; y = r * sin (PI / 2); }

Примечание :

Использование оператора with может значительно замедлить выполнение программы.

5. Комментарии Комментарии обычно разъясняют действия, выполняемые кодом. Комментарии игнорируются интерпретатором. JavaScript поддерживает комментарии в стиле Java и C++:
  • Однострочный комментарий с двойным слэшем в начале строки (//).
  • Многострочный комментарий с символами /* в начале и с символами */ в конце.
Пример.

Вот пример двух комментариев:

// Это однострочный комментарий. /* А это - многострочный. Он может быть любой длины, и вы можете поместить сюда всё, что угодно. */

6. Операторы обработки исключений Вы можете вызывать исключение оператором throw и обрабатывать его операторами try...catch .

Оператор try...catch используется также для обработки исключений Java. См. разделы «Обработка Исключений Java в JavaScript" и «Обработка Исключений JavaScript в Java».

6.1. Оператор throw Оператор throw используется для вызова исключения. Если вы вызываете исключение, вы специфицируете выражение, содержащее значение исключения:

throw expression

Следующий код вызывает несколько исключений.

throw " Error2 " ; // генерирует исключение со строковым значением throw 42 ; // генерирует исключение со значением 42 throw true ; // генерирует исключение со значением true

При вызове исключения вы можете специфицировать объект. Затем можно обратиться к свойствам объекта в блоке catch . Следующий пример создаёт объект myUserException типа UserException и использует его в операторе throw .

// Создаётся объект типа UserException function UserException (message ) { this . message = message ; this . name = " UserException " ; } // Создаётся и вызывается экземпляр объекта myUserException = new UserException (" Value too high " ) ; throw myUserException ;

6.2. Оператор try...catch Оператор try...catch помечает блок операторов, пытается их выполнить и специфицирует один или более вариантов ответа при возникновении исключения. Если исключение возникло, оператор try...catch отлавливает его.

Оператор try...catch состоит из блока try , который содержит один или более операторов, и нуль или более блоков catch , содержащих операторы, которые специфицируют действия при вызове исключения в блоке try . То есть, если вы хотите выполнить блок try и он не выполняется, вы передаёте управление в блок catch . Если любой оператор блока try (или оператор функции, вызываемой из блока try ) вызывает исключение, управление немедленно передаётся в блок catch . Если исключение не было вызвано, блок catch пропускается. Блок finally выполняется после выполнения блоков try и catch , но до выполнения оператора, идущего после блока оператора try...catch .

В следующем примере используется оператор try...catch . Вызывается функция, которая запрашивает название месяца из массива, базируясь на значении, передаваемом функции. Если значение не соответствует номеру месяца (1-12 ), вызывается исключение со значением «InvalidMonthNo" и операторы блока catch устанавливают переменную в monthName значение “unknown”.

function getMonthName (mo ) { mo = mo - 1 ; // Уточняется номер месяца по индексу массива (1=Jan, 12=Dec) var months = new Array (" Jan " , " Feb " , " Mar " , " Apr " , " May " , " Jun " , " Jul " , " Aug " , " Sep " , " Oct " , " Nov " , " Dec " ) ; if (months [ mo ] != null ) { return months [ mo ] } else { throw " InvalidMonthNo " } } try { // попытка выполнить эти операторы: monthName = getMonthName (myMonth ) // функция может вызвать исключение } catch (e ) { monthName = " unknown " logMyErrors (e ) // объект, вызвавший исключение, передаётся обработчику исключений }

throw ; вы можете использовать этот идентификатор для получения информации о вызванном исключении. JavaScript создаёт этот идентификатор при входе в блок catch ; идентификатор существует только в период выполнения блока catch ; после завершения выполнения блока catch идентификатор больше не доступен.

Например, следующий код вызывает исключение. Если возникает исключение, управление передаётся в блок catch .

try { throw " myException " // генерируется исключение } catch (e ) { // операторы для обработки любого исключения logMyErrors (e ) // исключение передаётся обработчику ошибок }

Несколько блоков catch

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

Например, следующая функция вызывает три другие функции (объявленные в другом месте), которые проверяют её аргументы. Если проверяющая функция определяет, что проверяемый компонент неверен, она возвращает 0, заставляя вызывающую функцию вызывать определённое исключение.

function getCustInfo (name , id , email ) { var n , i , e ; if (! validate_name (name )) throw " InvalidNameException " else n = name ; if (! validate_id (id )) throw " InvalidIdException " else i = id ; if (! validate_email (email )) throw " InvalidEmailException " else e = email ; cust = (n + " " + i + " " + e ) ; return (cust ) ; }

Условные блоки catch управляют вызовом соответствующего обработчика исключений.
" ) { // вызывает обработчик неправильных ids/идентификаторов bad_id_handler (e ) } catch (e if e == " InvalidEmailException " ) { // вызывает обработчик неправильных email-адресов bad_email_handler (e ) } catch (e ){ // незвестное исключение записывается в log-файл logError (e ) }

Блок finally

Блок finally содержит операторы, выполняемые после выполнения блоков try и catch , но до выполнения операторов, идущих после оператора try...catch . Блок finally выполняется независимо от того, было ли вызвано исключение. Если исключение вызывается, операторы блока finally выполняются даже в том случае, если ни один блок catch не обработал исключение.

Вы можете использовать блок finally для корректного завершения скрипта при возникновении исключения; например, Вам может понадобиться освободить ресурс, связанный скриптом. В следующем примере файл открывается и операторы работают с ним (серверный JavaScript даёт возможность доступа к файлам). Если вызывается исключение при открытом файле, блок finally закрывает файл до того, как скрипт потерпит неудачу.

openMyFile () ; try { writeMyFile (theData ) } finally { closeMyFile () // ресурс всегда закрывается }

Вложение операторов try...catch

Вы можете вкладывать один или более операторов try...catch друг в друга. Если внутренний оператор try...catch не имеет блока catch , на совпадение проверяется блок catch содержащего его оператора try...catch.

var a = 10; var b = (a>1) ? 100: 200; alert(b);

Если условие a>1 истинно, то переменной b присвоить значение 100 , иначе переменной b присвоить значение 200 .

Задание Js 3_4. Дополнить код: объявлено 3 локальные переменные с использованием ключевого слова var . Необходимо в переменную max присвоить значение следующего тернарного оператора: если a больше b , то возвращаем a , иначе возвращаем b .
Фрагмент кода:

if (a * b < 6) { result = "Мало"; } else { result = "Много"; }


Вопросы для самоконтроля:

  • Каков синтаксис тернарного оператора?
  • Сколько аргументов у тернарного оператора?
  • Оператор переключения в javaScript - switch

    Оператор switch javascript служит для проверки переменной на множество значений:

    Синтаксис:

    switch (переменная или выражение) { case вариант1: //..блок операторов.. break case вариант2: //..блок операторов.. break default: //..блок операторов.. }

    Проверяется значение переменной или выражения: в каждом case проверяется одно из значений, в случае подходящего значения выполняется тот или иной блок операторов, соответствующий данному case .

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

    Важно: Оператор break обязателен после каждого рассмотренного значения переменной (после каждого case ); если его не использовать, то будут выведены все, расположенные ниже операторы

    Сравним с оператором IF :

    var a = 2; switch(a) { case 0: // if (a === 0) case 1: // if (a === 0) alert("Ноль или один"); // тогда выводим... break; case 2: // if (a === 2) alert("Два"); // тогда выводим... break; default: // else alert("Много"); // иначе выводим... }

    Как сгруппировать несколько вариантов?

    Для выполнения одних и тех же операторов возможно группировка нескольких case . Как в примере выше:

    Case 0: case 1: alert("Ноль или один"); break; ...

    При a = 0 и a = 1 выполняется один и тот же оператор: alert("Ноль или один");

    Пример 4: Запрашивать у пользователя ввести цвет. Выводить перевод на английский язык введенного цвета. Для цвета "синий" и "голубой" выдавать одно и то же значение.


    ✍ Решение:
    • Создайте веб-страницу с html-скелетом и тегом script .
    • Инициализируйте переменную color
    • var color = prompt("Какой цвет?" ) ;

      var color = prompt("Какой цвет?");

    • Проверьте значение переменной с помощью конструкции switсh , выводя на каждое значение - соответствующий перевод:
    • switch (color) { case "красный" : alert("red"); break; case "зеленый": alert("green"); break; // ...

      Если переменная color имеет значение "красный", то вывести в модальное окно перевод - "red" и выйти из конструкции (break;). Если переменная color имеет значение "зеленый", то вывести в модальное окно перевод - "green" и выйти из конструкции (break;).

    • Для цветов "синий" и "голубой" выполните группировку:
    • // ... case "синий": case "голубой": alert("blue"); break; // ...

      Если переменная color имеет значение "синий" или переменная color имеет значение "голубой", то вывести в модальное окно перевод - "blue" и выйти из конструкции (break;).

    • Организуйте вывод для тех цветов, которые не предусмотрены программой:
    • // ... default : alert("y нас нет сведений по данному цвету" ) } // конец switch

      // ... default: alert("y нас нет сведений по данному цвету") } // конец switch

    • Протестируйте сценарий в браузере.

    Задание Js 3_6. Найдите и исправьте ошибки в следующем фрагменте кода:

    14 15 16 17 var number = prompt("Введите число 1 или 2:" ) ; switch (number) { case "1" { document.write ("Один" ) ; } ; break ; case "2" { document.write ("Два" ) ; } ; break ; default { document.write ("Вы ввели значение, отличное от 1 и 2" ) ; } ; }

    var number = prompt("Введите число 1 или 2:"); switch (number) { case "1" { document.write("Один"); }; break; case "2" { document.write("Два"); }; break; default { document.write("Вы ввели значение, отличное от 1 и 2"); }; }


    Задание Js 3_7. Что выведется на экране при выполнении следующего кода?:

    1 2 3 4 5 6 7 8 9 10 11 12 13 var value = "2" ; switch (value) { case "1" : case "2" : case "3" : document.write ("Hello" ) ; break ; case "4" : case "5" : document.write ("World" ) ; default : document.write ("Error" ) ; }

    var value = "2"; switch (value) { case "1": case "2": case "3": document.write("Hello"); break; case "4": case "5": document.write("World"); default: document.write("Error"); }


    Задание Js 3_8. У пользователя запрашивать число – количество ворон на ветке. В зависимости от введенного числа (не более 10), выводить сообщение: - На ветке сидит 1 ворона - На ветке сидит 4 вороны - На ветке сидит 10 ворон

  • В зависимости от введенного числа, меняется окончание у слова "ворона" .
  • Для проверки использовать оператор Switch javascript.
  • Сохраните данную страницу в папке результатов (она пригодится для дальнейших работ).

  • Вопросы для самоконтроля:

  • В каком случае целесообразно в качестве условного оператора использовать конструкцию switch ?
  • Для чего служит блок default в операторе switch ?
  • Обязательно ли использование оператора break в конструкции switch ?
  • Как осуществляется группировка для нескольких вариантов значений в операторе switch ?
  • Циклические операторы языка javaScript - For

    Синтаксис:

    for(начальное значение счетчика; условие; приращение счетчика) { //..блок операторов.. }

    Важно: Цикл в javascript for используется, когда заранее известно, сколько раз должны повториться циклические действия (сколько итераций у цикла)

    • В качестве начального значения счетчика итераций используется выражение присваивания: например, i=0 - счетчик цикла начинается с нуля:
    • for(var i = 0; условие; приращение счетчика) { //..блок операторов.. }

    • В качестве приращения счетчика указывается шаг, с которым должен увеличиваться счетчик: например, указывает на то, что каждая итерация цикла будет сопровождаться его увеличением на 1 :
    • for(var i = 0; условие; i++) { //..блок операторов.. }

    • Условие цикла - это и есть конечное значение счетчика: например, i10, останавливает цикл:
    • for(var i = 0; i