Операторы JavaScript. Выражения и операторы Операторы ява скрипт

Сначала кратко про выражения в JavaScript.

Выражения JavaScript

В языке JavaScript есть инструкции и выражения.

Инструкции не возвращают значений.

Выражения всегда возвращают какие-то значения. Когда интерпритатор видит выражение, он вычисляет его значение и заменяет выражение его значением.

Выражения бывают простыми и составными. Простые выражения не включают в себя другие выражения.

К простым выражениям относятся:

  1. Идентификаторы: someVar (имя переменной);
  2. Литералы: "строка" или 675 (число, или числовой литерал);
  3. Некоторые ключевые слова, например this ;

Когда парсер обнаруживает идентификатор, ему сначала нужно вычислить его значение, то есть, например, заменить имя переменной её значением.

Значение литерала будет таким, каким оно прописано в коде скрипта.

Операторы и сложные выражения JavaScript

Чтобы объединить несколько простых выражений в одно сложное используется операторы.

Операторы бывают:

  • Унарные (один операнд).
  • Бинарные (два операнда).
  • Тернарный оператор ? в JavaScript (три операнда, есть только один тернарный оператор).

Операнд - то простое выражение, к которому применяется оператор.

Например арифметический оператор сложения "+" является бинарным оператором. Он суммирует левый и правый операнд и возвращает сумму.

Var digit = 4 + 7;

Кстати, присваивание происходит при помощи оператора присваивания "=". Этот оператор вычисляет значение правого операнда и присваивает его левому операнду.

В JavaScript есть унарный плюс, у него существует только один операнд. Унарный плюс не является арифметическим оператором, он преобразует операнд в число.

Var myVar = "7"; document.write(typeof(myVar) + "
"); // Напечатает в документе string myVar = +myVar; document.write(typeof(myVar) + "
"); // Напечатает в документе number

Сначала переменная myVar содержала строку "7", это литерал строкового типа (string), а не числового (number). При помощи оператора унарный плюс мы преобразовали строковой литерал в числовой.

Арифметические операции

Арифметические операции - это всем известные математические действия.

Возможно оператор % (остаток от деления) нуждается в пояснении. 9 делится на 5 с остатком 4, именно этот остаток и возвращает этот оператор. Также его называют взятием по модулю. При использовании целых чисел результат работы этого оператора также будет целое число. При оперировании числами с плавающей точкой результатом будет число с плавающей точкой.

5.5 % 2.2 = 1.1

При арифметических операциях следует помнить что при некорректном их выполнении они могут привести к результатам:

  • NaN (Not a Number) - не число.
  • Infinity - бесконечность.

Вот к чему приведёт деление на ноль:

Var myVar = 0 / 0; document.write("Значение переменной: " + myVar + ", её тип: " + typeof(myVar) + "
");

Операции сравнения

Операции сравнения используются для сопоставления выражений. Выражение с условным оператором возвращает булево значение - истина или ложь (true / false).

Операции сравнения можно проводить и со строками, об этом речь будет в другом уроке. Единственное условие правильного результата - сопоставлять данные одного и того же типа. Иначе JavaScript попытается перевести данные из одного типа в другой, а это не всегда удаётся. Чтобы избежать ошибок сравнивайте данные только одного типа.

Операции присваивания

Наиболее очевидным примером операции присваивания является простое присваивание (=). Этот оператор (=) используется для присваивания значения переменной.

Но есть ещё ряд операций присваивания, которые являются сокращениями.

Логические операции

Логические операции часто используются с конструкцией if else в JS . Именно на примерах этой конструкции будет продемонстрирована их работа. Но сначала список логических операторов.

Теперь простые примеры:

If (true && true) document.write("Это работает!
"); if (true || false) document.write("Это работает!
"); if (!false) document.write("Это работает!
");

Разберём эти примеры:

Оператор логическое И (&&) вернёт истину, если оба операнда истины.

Оператор логическое ИЛИ (||) вернёт истину, если хоть один операнд является истиной.

Оператор логическое НЕ (!) принимает один операнд и изменяет значение истина/ложь на обратное.

Унарные операторы

Унарные операторы - это операторы с одним операндом. Вот несколько таких операторов:

  • ++ - возрастание на 1 (increment). Может быть префиксное и постфиксное, об этом ниже.
  • -- - уменьшение на 1 (decrement). Может быть префиксное и постфиксное, об этом тоже ниже.
  • + - унарный плюс.
  • - - унарный минус.

Унарный минус

Унарный минус изменяет знак выражения на противоположный. Например, когда вы пишите в программе -100, вы просто применяете к числовому литералу 100 унарный минус.

Нужно точно понимать как работает унарный минус - он возвращает значение операнда с противоположным знаком. Вот пример как правильно использовать унарный минус:

Var myVar = -100; document.write(-myVar + " - унарный минус сработал, но переменная также = " + myVar + ".
"); myVar = -myVar; document.write("Теперь переменная = " + myVar + ".
");

Приведём безсмысленный пример двойного унарного минуса. Думаю в образовательных целях он будет полезен:

Var myVar = -100; document.write(--myVar + " - это инкремент, а не двойной унарный минус.
"); document.write("Теперь переменная = " + myVar + ".
"); document.write(-(-myVar) + " а это двойное применение унарного минуса.
");

Унарный плюс

Унарный плюс не совершает никаких математических действий. Он приводит литерал к числовому типу.

Var myVar = "78687"; document.write(typeof(myVar) + ".
"); myVar = +myVar; document.write(typeof(myVar) + ".
");

Инкремент и декремент

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

  • ++ - возрастание на 1 (increment).
  • -- - уменьшение на 1 (decrement).

В отличии от унарного плюса и минуса инкремент и декремент меняет значение переменной при вызове.

Var myVar = 10; document.write(++myVar + ".
"); document.write(myVar + ".
");

Декремент (-- ) действует аналогично.

Теперь рассмотрим префиксное и постфиксное использование этих операторов.

  • ++myVar - префиксное возрастание на 1.
  • myVar++ - постфиксное возрастание на 1.

Разница такая:

  • Префиксное использование этих операторов сначала вычисляет значение унарного оператора, а потом использует результат в выражении.
  • Постфиксное использование сначала вычисляет выражение, а потом выполняет унарный оператор (++ или -- ).

В этом вам поможет разобраться простой пример:

Var myVar = 10; document.write((++myVar + 5) + ".

"); var myVar = 10; document.write((myVar++ + 5) + ".
"); document.write("Переменная = " + myVar + ".
");

Инкремент и декремент допускается использовать только с переменными, применять их к числовым литералам нельзя. Проще говоря код ++7 дас ошибку в сценарии.

Другие операторы

В языке JavaScript есть другие операторы:

  • Тернарный (с тремя операндами) оператор

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 = "Много"; }


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

  1. Каков синтаксис тернарного оператора?
  2. Сколько аргументов у тернарного оператора?

Оператор переключения в 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 ворон

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


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

  1. В каком случае целесообразно в качестве условного оператора использовать конструкцию switch ?
  2. Для чего служит блок default в операторе switch ?
  3. Обязательно ли использование оператора break в конструкции switch ?
  4. Как осуществляется группировка для нескольких вариантов значений в операторе switch ?

Циклические операторы языка javaScript - For

Синтаксис:

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

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

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

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

  • Условие цикла - это и есть конечное значение счетчика: например, i10, останавливает цикл:
  • for(var i = 0; i<10; i++) { //..блок операторов.. }

Рассмотрим пример использования цикла for в javascript:

Пример 5: Вывести последовательность чисел 0 1 2 3 ... 9 , каждую цифру - с новой строки. 0 1 2 ... 8 9


✍ Решение:
  • Для вывода последовательности чисел будем использовать счетчик цикла for , который должен менять свое значение от 0 до 9 согласно последовательности.
  • Значит, для начального значения счетчика цикла установите значение, равное 0 ; в качестве условия цикла установите заключительное значение - ii=9; шаг счетчика должен равняться 1 (i++), так как разница между членами последовательности - единица:
  • for (var i=0; i<10; i++) { document.write(i+"
    "); }

    В примере на экран выводятся значения счетчика цикла, так как приращение счетчика i++ , соответственно, на экране будут появляться 0 1 2 3 ... 9 , причем каждая цифра - с новой строки (тег
    ).

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

Задание Js 3_9. 1 до 15 .

  1. В качестве последовательности чисел используйте счетчик цикла for .
  2. Для переменной-сумматора следует использовать идентификатор переменной sum .

Фрагмент кода:

For (var i=...;...;...){ sum = sum + ...; } ...

Операторы выхода из цикла break и continue в javaScript. Оператор Exit

Оператор break прерывает выполнение всего тела цикла, т.е. осуществляет выход из цикла в javaScript.

В то время как оператор continue прерывает выполнение текущей итерации цикла, но, продолжая при этом выполнение цикла со следующий итерации.

Рассмотрим работу операторов break и continue на примере:

Пример: Разберите алгоритм фрагмента кода. Что будет выведено?

Фрагмент кода:

1 2 3 4 5 6 for (var i= 0 ; i< 10 ; i++ ) { if (i== 4 ) continue ; document.write (i+ "
" ) ; if (i== 8 ) break ; }

for (var i=0;i<10;i++) { if (i==4) continue; document.write(i+"
"); if (i==8) break; }


✍ Решение:
  • В третьей строке примера стоит условие, из-за которого цифра 4 не будет выводиться на экран: оператор continue перейдет к следующей итерации цикла, не завершив текущую.
  • В строке №5 осуществляется выход из цикла, но при этом цифра 8 будет выведена на экран, так как оператор вывода стоит до условия (в 4-й строке). Встретив break , интерпретатор завершит работу цикла.
  • Т.о. на экране будет: 0 1 2 3 5 6 7 8 - каждая цифра с новой строки.

Задание Js 3_10. Вывести сумму всех целых чисел от 1 до 15 , исключив из общей суммы числа 5 и 7 .

Оператор Exit

В языке javasctipt предусмотрен оператор выхода из программного кода - оператор exit .
Чаще всего оператор используется для исключения ошибки ввода пользователя.


Рассмотрим пример:

Пример 6: Запрашивать пользователя ввести число. Если введено не число, то выводить сообщение "Необходимо число!" и останавливать работу программы.


✍ Решение:
  • Инициализируйте переменную number значением, введенным пользователем в модальное окно:
  • var number = prompt("Введите число");

  • Используя функцию parseInt преобразования строки в целое число, проверьте, является ли введенное значение числом:
  • number=parseInt(number); // возвратит NaN - не число

    В случае, если введено не число, функция возвратит значение NaN (с англ. not a number - не число).

  • Проверьте значение переменной number с помощью функции isNaN:
  • x = isNaN(number); // возвратит true, если значение не числовое

    Функция isNaN возвращает значение true в случае, если переменная не является числом

  • По правилу "лжи" организуйте проверку значения переменной x . Если значение не числовое выведите соответствующее замечание и завершите программу:
  • if (x){ alert("Необходимо число!"); exit; // выход из программы }

  • Для продолжения программы (если введенное значение было числом), выведите следующее окно с предложением ввода:
  • alert("Введите второе число");// при вводе не числа оператор не выполнится

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

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

  1. Перечислите три параметра цикла for и поясните их назначение.
  2. Какие операторы предназначены для выхода из цикла и для его прерывания? Приведите примеры их использования.
  3. Для чего предназначен оператор exit ?

Возможно ли несколько счетчиков в одном FOR?

Интересная работа с циклом for возможна при использовании одновременно двух счетчиков в цикле .
Рассмотрим пример:

Пример 7: При помощи скрипта распечатать следующие пары переменная-значение в три строки: i=0 j=2 i=1 j=3 i=2 j=4


✍ Решение:
  • В цикле for организуйте два счетчика: счетчик i для вывода последовательности 0 1 2 , счетчик j для вывода последовательности 2 3 4 :
  • 1 2 3 for (i= 0 , j= 2 ; i< 10 , j< 5 ; i++, j++ ) { }

    for(i=0, j=2; i<10, j<5; i++, j++) { }

    Каждый из трех параметров цикла for теперь имеет по два значения, которые перечисляются через запятую (например, первый параметр с двумя значениями: i=0, j=2). Сами параметры перечисляются через точку с запятой (;).

  • Для вывода с каждой строки используйте тег
    :
  • 1 2 3 4 for (i= 0 , j= 2 ; i< 10 , j< 5 ; i++, j++ ) { document.write ("
    i=" , i, "j=" , j) ; }

    for(i=0, j=2; i<10, j<5; i++, j++) { document.write("
    i=", i, "j=",j); }

Генерация страницы "на лету": как это?

Перед выполнением следующего задания рассмотрим пример динамического построения html-страницы при помощи javascript.

Пример 8:

  • Необходимо динамически генерировать маркированные и нумерованные списки на веб-странице в зависимости от введенных пользователем данных: запрашивать у пользователя ввести вид списка (нумерованный (цифра 1 ) или маркированный (цифра 2 )), а затем количество пунктов списка .
  • В зависимости от ответа выводить на экран теги либо маркированного либо нумерованного списка с необходимым количеством пунктов.
  • Если введен несуществующий тип списка, то выдавать сообщение "Введите правильный тип!" и осуществлять выход из программы ().

Вспомним теги:
теги нумерованного списка:

<ol > <li > <li > <li > </ ol >

теги маркированного списка:

var listType=prompt("Введите "1" - если маркированный список, "2" - если нумерованный список");

  • Проверьте введенное значение: для нумерованного списка (цифра 1) выведите тег
      , для маркированного (цифра 2) - тег
        . Если введено другое значение, выведите замечание и закончите программу:

            ") else { alert("Введите правильный тип"); exit; }

          • Инициализируйте переменную kolvo значением, введенным пользователем в модальное окно:
          • var kolvo=prompt("Введите количество пунктов");

          • Для преобразования строкового значения в числовое используйте функцию parseInt:
          • for (var i=1; i<=kolvo; i++) document.write("");

          • Поскольку списки закрываются соответствующими тегами, в зависимости от вида списка выведите закрывающие теги:
          • if (listType== "1" ) document.write ("" ) else if (listType== "2" ) document.write ("" ) ;

            if (listType=="1") document.write("

        ") else if (listType=="2") document.write("
      ");

    1. Протестируйте сценарий в браузере.
    2. Задание Js 3_11.
      Написать скрипт, который выводит теги input (элементы управления) разного типа, в зависимости от введенной цифры:

      1 - текстовое поле ,
      2 - кнопка ,
      3 - radio (переключатель).

      Количество выведенных тегов должно тоже запрашиваться.

      Вспомним теги:

      Для 1 - текстовое поле: Для 2 - кнопка: Для 3 - radio:

      Пример вывода:

      Задание Js 3_12. Нарисовать шахматную доску 9х9, используя циклы javascript for . "Рисовать" доску следует тегами html для таблицы:

      Вспомним теги:

      <table border = "1" width = "30%" > <tr > <td > -</ td > -</ td > </ tr > </ table >

      --

      • Для рисования 9 строк необходимо организовать внешний цикл for со счетчиком i .
      • Для рисования 9 ячеек в каждой строке необходимо организовать внутренний (вложенный) цикл for со счетчиком j .
      • Для отрисовки тегов ячеек и строк следует использовать метод document.write .

      Результат:

      Дополнительно:

      1. В ячейки таблицы вывести таблицу умножения, используя счетчики цикла (i и j).
      2. Первый ряд и первую колонку вывести с красным фоном (атрибут ячейки таблицы bgcolor):
        <td bgcolor = "red" > -</ td >

        -

      Результат:


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

      1. Объясните, что значит понятие «динамическое построение страницы»?
      2. Какая конструкция языка чаще всего используется при динамическом построении страницы?

      Циклические операторы языка javaScript - While

      Синтаксис оператора while:

      while (условие) { //..блок операторов.. };

      Пример: Выводить в диалоговое окно степени двойки до 1000 (2, 4, 8 ... 512). Использовать метод alert()


      ✍ Решение:
      • Листинг скрипта:
      • 1 2 3 4 5 var a = 1 ; while (a < 1000 ) { a*= 2 ; alert(a) ; }

        var a = 1; while (a < 1000){ a*=2; alert(a); }

        a*=2 → использована операция составного присваивания: произведение, совмещенное с присваиванием, т.е. то же самое, что a = a*2

      • Протестируйте результат в браузере.

      Как работают операторы break и continue в цикле while ?

      Пример:

      var a = 1 ; while (a < 1000 ) { a*= 2 ; if (a== 64 ) continue ; if (a== 256 ) break ; alert(a) ; }

      var a = 1; while (a < 1000){ a*=2; if (a==64) continue; if (a==256) break; alert(a); }

      Степени двойки будут выводиться до 128 включительно, причем значение 64 будет пропущено. Т.е. в диалоговых окнах мы увидим: 2 4 8 16 32 128

      Задание Js 3_13. Какие значения выведет следующий фрагмент кода?

      var counter = 5; while (counter < 10) { counter++; document.write("Counter " + counter); break; document.write("Эта строка не выполнится."); }


      Задание Js 3_14. Написать код возведения х в степень y , используя цикл while . Запрашивать значения переменных и выводить результат с помощью alert() .

      Дополните код:

      1 2 3 4 5 6 7 8 9 var x = ...; var y = ...; counter = 1 ; chislo= x; while (...) { chislo= x* ...; counter= ...; } alert(chislo) ;

      var x = ...; var y = ...; counter = 1; chislo=x; while (...){ chislo=x*...; counter=...; } alert(chislo);

      A Исправьте ошибку в программе, предназначенную для нахождения факториала числа:

      1 2 3 4 5 6 7 8 9 10 11 12 13 var counter = prompt("Введите число" ) ; var factorial = 1 ; document.write ("Факториал числа: " + counter + "! = " ) ; do { if (counter == 0 ) { factorial = 1 ; break ; } factorial = factorial / counter; counter = counter + 1 ; } while (counter > 0 ) ; document.write (factorial) ;

      var counter = prompt("Введите число"); var factorial = 1; document.write("Факториал числа: " + counter + "! = "); do { if (counter == 0) { factorial = 1; break; } factorial = factorial / counter; counter = counter + 1; } while (counter > 0); document.write(factorial);


      Задание Js 3_16. Модифицировать программу про ввод имени пользователем:

      Запрашивать имя пользователя до тех пор, пока пользователь действительно введет имя (т.е. поле действительно будет заполнено и не нажата клавиша cancel). Когда имя введено, то выводить "Привет, имя!" . document.

      Как искать ошибки в javascript?

      В некоторых случаях код на странице не работает непонятно по какой причине. Где искать ошибку? В таких случаях можно применить оператор try..catch .

      Оператор try..catch пытается выполнить фрагмент кода, и, если в коде есть ошибка, то существует возможность выдать ошибку на экран.
      Ошибка хранится в объекте e.message .

      Рассмотрим работу оператора на примере:

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


      ✍ Решение:
      • В качестве сообщения с ошибкой будем использовать метод prompt() , написанный с ошибкой - promt() . Сообщение с ошибкой заключите в блок try:
      • alert("до"); try { promt("введите число"); // оператор с ошибкой }

        Try с англ. - "пытаться", таким образом, ставим оператор try перед фрагментом кода, который, возможно, содержит ошибку (в нашем случае ошибка действительно есть).

      • Сообщение с извещением об ошибке следует разместить в блок catch:
      • 6 7 8 9 catch (e) { alert("обработка ошибки: " + e.message ) ; }

        catch(e) { alert("обработка ошибки: "+e.message); }

        Если ошибка действительно есть, то оператор catch (с англ. "ловить") сохраняет эту ошибку в объекте e . В дальнейшем ее можно вывести в диалоговое окно - e.message .

      • Завершающее сообщение, которое необходимо выводить независимо от того, есть ли в коде ошибка, поместите в блок finally:
      • finally { alert("завершающие действия"); } alert("после");

        Если ошибка все же есть, то интерпретатор после ее вывода в нашем примере перейдет на выполнение блока catch , а затем finally (с английского "завершение", "наконец"), который выполнится всегда, независимо от того, была ли ошибка или нет. Даже если возникла ошибка в блоке catch .

      Важно: Блок finally в конструкции необязателен.


      Задание Js 3_17. Выполните пример, описанный выше, со следующими модификациями:

    3. Удалите блок finally и проследите за выполнением кода.
    4. Поставьте вместо ошибочного оператора безошибочный и посмотрите, каким будет результат.
    5. Резюме:

      На уроке были рассмотрены следующие операторы языка javascript и конструкции:

      Javascript условные операторы:

    6. Оператор if
    7. Условное присваивание (тернарный оператор)
    8. Оператор переключения switch
    9. Операторы цикла:

    10. Цикл for
    11. Цикл while
    12. Цикл do...while
    13. Цикл for...in
    14. Итоговое задание Js 3_18.
      Создать игру для двоих:

      1. Программа просит первого игрока ввести число от 1 до 100 (второй игрок не видит введенное число). Затем второго игрока просит угадать введенное число. В ответ выводится сообщение «мало» либо «много» в зависимости от введенного ответа. Если игрок угадывает, - выводится поздравление. Если не угадывает – игра продолжается (до тех пор, когда число действительно будет угадано).
      2. Просчитывать число попыток и выдавать результат, когда число разгадано.


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

      1. В каких случаях целесообразно использовать цикл For In ? Назовите пример его использования.
      2. Каково назначение оператор try..catch ?
      3. Объясните назначение каждого блока оператора try..catch .

      This chapter describes JavaScript"s expressions and operators, including assignment, comparison, arithmetic, bitwise, logical, string, ternary and more.

      A complete and detailed list of operators and expressions is also available in the reference .

      Operators

      JavaScript has the following types of operators. This section describes the operators and contains information about operator precedence.

      JavaScript has both binary and unary operators, and one special ternary operator, the conditional operator. A binary operator requires two operands, one before the operator and one after the operator:

      operand1 operator operand2

      For example, 3+4 or x*y .

      A unary operator requires a single operand, either before or after the operator:

      operator operand operand operator 1 / 2; // 0.5 1 / 2 == 1.0 / 2.0; // this is true

      In addition to the standard arithmetic operations (+, -, * /), JavaScript provides the arithmetic operators listed in the following table:

      Arithmetic operators
      Operator Description Example
      Remainder (%) Binary operator. Returns the integer remainder of dividing the two operands. 12 % 5 returns 2.
      Increment (++) Unary operator. Adds one to its operand. If used as a prefix operator (++x), returns the value of its operand after adding one; if used as a postfix operator (x++), returns the value of its operand before adding one. If x is 3, then ++x sets x to 4 and returns 4, whereas x++ returns 3 and, only then, sets x to 4.
      Decrement (--) Unary operator. Subtracts one from its operand. The return value is analogous to that for the increment operator. If x is 3, then --x sets x to 2 and returns 2, whereas x-- returns 3 and, only then, sets x to 2.
      Unary negation (-) Unary operator. Returns the negation of its operand. If x is 3, then -x returns -3.
      Unary plus (+) Unary operator. Attempts to convert the operand to a number, if it is not already. +"3" returns 3 .
      +true returns 1.
      Exponentiation operator (**) Calculates the base to the exponent power, that is, base exponent 2 ** 3 returns 8 .
      10 ** -1 returns 0.1 .

      Bitwise operators

      Use instanceof when you need to confirm the type of an object at runtime. For example, when catching exceptions, you can branch to different exception-handling code depending on the type of exception thrown.

      For example, the following code uses instanceof to determine whether theDay is a Date object. Because theDay is a Date object, the statements in the if statement execute.

      Var theDay = new Date(1995, 12, 17); if (theDay instanceof Date) { // statements to execute }

      Operator precedence

      The precedence of operators determines the order they are applied when evaluating an expression. You can override operator precedence by using parentheses.

      The following table describes the precedence of operators, from highest to lowest.

      Operator precedence
      Operator type Individual operators
      member .
      call / create instance () new
      negation/increment ! ~ - + ++ -- typeof void delete
      multiply/divide * / %
      addition/subtraction + -
      bitwise shift << >> >>>
      relational < <= > >= in instanceof
      equality == != === !==
      bitwise-and &
      bitwise-xor ^
      bitwise-or |
      logical-and &&
      logical-or ||
      conditional ?:
      assignment = += -= *= /= %= <<= >>= >>>= &= ^= |=
      comma ,

      A more detailed version of this table, complete with links to additional details about each operator, may be found in JavaScript Reference .

      Expressions

      An expression is any valid unit of code that resolves to a value.

      Every syntactically valid expression resolves to some value but conceptually, there are two types of expressions: with side effects (for example: those that assign value to a variable) and those that in some sense evaluate and therefore resolve to a value.

      The expression x = 7 is an example of the first type. This expression uses the = operator to assign the value seven to the variable x . The expression itself evaluates to seven.

      The code 3 + 4 is an example of the second expression type. This expression uses the + operator to add three and four together without assigning the result, seven, to a variable.

      JavaScript has the following expression categories:

      Primary expressions

      Basic keywords and general expressions in JavaScript.

      this

      Use the this keyword to refer to the current object. In general, this refers to the calling object in a method. Use this either with the dot or the bracket notation:

      This["propertyName"] this.propertyName

      Suppose a function called validate validates an object"s value property, given the object and the high and low values:

      Function validate(obj, lowval, hival) { if ((obj.value < lowval) || (obj.value > hival)) console.log("Invalid Value!"); }

      You could call validate in each form element"s onChange event handler, using this to pass it to the form element, as in the following example:

      Enter a number between 18 and 99:

      Grouping operator

      The grouping operator () controls the precedence of evaluation in expressions. For example, you can override multiplication and division first, then addition and subtraction to evaluate addition first.

      Var a = 1; var b = 2; var c = 3; // default precedence a + b * c // 7 // evaluated by default like this a + (b * c) // 7 // now overriding precedence // addition before multiplication (a + b) * c // 9 // which is equivalent to a * c + b * c // 9

      Left-hand-side expressions

      Left values are the destination of an assignment.

      new

      You can use the new operator to create an instance of a user-defined object type or of one of the built-in object types. Use new as follows:

      Var objectName = new objectType();

      super

      The super keyword is used to call functions on an object"s parent. It is useful with classes to call the parent constructor, for example.

      Super(); // calls the parent constructor. super.functionOnParent();

      Spread operator

      The spread operator allows an expression to be expanded in places where multiple arguments (for function calls) or multiple elements (for array literals) are expected.

      Example: Today if you have an array and want to create a new array with the existing one being part of it, the array literal syntax is no longer sufficient and you have to fall back to imperative code, using a combination of push , splice , concat , etc. With spread syntax this becomes much more succinct:

      Var parts = ["shoulders", "knees"]; var lyrics = ["head", ...parts, "and", "toes"];

      Similarly, the spread operator works with function calls:

      Function f(x, y, z) { } var args = ; f(...args);

      Эта глава описывает выражения и операторы языка JavaScript, такие как операторы присваивания, сравнения, арифметические, битовые, логические, строчные, и различные специальные операторы.

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

      Операторы

      В JavaScript есть следующие типы операторов. Данный подраздел описывает каждый тип и содержит информацию об их приоритетах друг над другом.

      JavaScript поддерживает бинарные и унарные операторы, а также ещё один специальный тернарный оператор - условный оператор. Бинарная операция использует два операнда, один перед оператором и другой за ним:

      operand1 operator operand2

      Например: 3+4 или x*y .

      В свою очередь унарная операция использует один операнд, перед или после оператора:

      operator operand operand operator

      Например: x++ или ++x .

      Операторы присваивания

      В результате операции присваивания операнду слева от оператора присваивания (знак "=") устанавливается значение, которое берётся из правого операнда. Основным оператором присваивания является =, он присваивает значение правого операнда операнду, находящемуся слева. Таким образом, выражение x = y означает, что x присваивается значение y.

      Существуют также составные операторы присваивания, которые используются для сокращенного представления операций, описанных в следующей таблице:

      Список операторов присваивания
      Имя Сокращенный оператор Смысл
      Присваивание x = y x = y
      Присваивание со сложением x += y x = x + y
      Присваивание с вычитанием x -= y x = x - y
      Присваивание с умножением x *= y x = x * y
      Присваивание с делением x /= y x = x / y
      Присваивание по модулю x %= y x = x % y
      Присваивание с левым сдвигом x <<= y x = x << y
      Присваивание с правым сдвигом x >>= y x = x >> y
      Присваивание с беззнаковым сдвигом вправо x >>>= y x = x >>> y
      Присваивание с побитовым AND x &= y x = x & y
      Присваивание с побитовым XOR x ^= y x = x ^ y
      Присваивание с побитовым OR x |= y x = x | y

      Деструктуризация

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

      Var foo = ["one", "two", "three"]; // без деструктуризации var one = foo; var two = foo; var three = foo; // с деструктуризацией var = foo;

      Операторы сравнения

      Вы можете использовать оператор delete для удаления переменных, объявленных неявно, но вы не можете с его помощью удалять переменные, объявленные с помощью var .

      После применения оператора delete свойство элемента меняется на undefined . Оператор delete возвращает true если выполнение операции возможно; оператор возвращает false , если выполнение операции невозможно.

      X = 42; var y = 43; myobj = new Number(); myobj.h = 4; // создаём свойство h delete x; // возвращает true (можно удалить переменную объявленную неявно) delete y; // возвращает false (нельзя удалить переменную объявленную с помощью var) delete Math.PI; // возвращает false (нельзя удалить встроенные свойства) delete myobj.h; // возвращает true (можно удалить пользовательские свойства) delete myobj; // возвращает true (можно удалить объект объявленный неявно)

      Удаление элементов массива

      Удаление элемента массива не влияет на длину массива. Например, если вы удалите a , элемент a останется a, a станет undefined.

      Когда элемент массива удаляется с помощью оператора delete , то из массива удаляется значение данного элемента. В следующем примере элемент trees удален с помощью оператора delete . Однако, элемент trees остается адресуемым и возвращает значение undefined .

      Var trees = new Array("redwood", "bay", "cedar", "oak", "maple"); delete trees; if (3 in trees) { // условие не выполняется }

      Если вы хотите, чтобы элемент оставался в массиве, но имел значение undefined, то используйте ключевое слово undefined вместо оператора delete . В следующем примере элементу trees присвоено значение undefined , но элемент при этом остается в массиве:

      Var trees = new Array("redwood", "bay", "cedar", "oak", "maple"); trees = undefined; if (3 in trees) { // данный блок кода выполняется }

      Оператор typeof

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

      Например, следующий код использует оператор instanceof для проверки того, является ли объект theDay объектом типа Date . Так как theDay действительно является объектом типа Date , то программа выполняет код, содержащийся в утверждении if .

      Var theDay = new Date(1995, 12, 17); if (theDay instanceof Date) { // выполняемый код }

      Приоритет операторов

      Приоритет операторов определяет порядок их выполнения при вычислении выражения. Вы можете влиять на приоритет операторов с помощью скобок.

      Приведенная ниже таблица описывает приоритет операторов от наивысшего до низшего.

      Таблица 3.7 Приоритет операторов
      Тип оператора Операторы
      свойство объекта .
      вызов, создание экземпляра объекта () new
      отрицание, инкремент ! ~ - + ++ -- typeof void delete
      умножение, деление * / %
      сложение, вычитание + -
      побитовый сдвиг << >> >>>
      сравнение, вхождение < <= > >= in instanceof
      равенство == != === !==
      битовое-и &
      битовое-исключающее-или ^
      битовое-или |
      логическое-и &&
      логическое-или ||
      условный (тернарный) оператор ?:
      присваивание = += -= *= /= %= <<= >>= >>>= &= ^= |=
      запятая ,

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

      Выражения

      Выражением является любой корректный блок кода, который возвращает значение.

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

      Выражение x = 7 является примером выражения первого типа. Данное выражение использует оператор = для присваивания переменной x значения 7 . Само выражение также равняется 7.

      Код 3 + 4 является примером выражения второго типа. Данное выражение использует оператор "+" для сложения чисел 3 и 4 без присваивания переменной полученного результата 7.

      Все выражения в JavaScript делятся на следующие категории:

      Основные выражения

      Базовые ключевые слова и основные выражения в JavaScript.

      Оператор this

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

      This["propertyName"] this.propertyName

      Предположим, функция validate выполняет проверку свойства value некоторого объекта; задан объект, а также верхняя и нижняя граница величины данного свойства:

      Function validate(obj, lowval, hival){ if ((obj.value < lowval) || (obj.value > hival)) alert("Неверное значение!"); }

      Вы можете вызвать функцию validate для обработчика события onChange для каждого элемента формы, используя this для указания на элемент формы, как это показано в следующем примере:

      Введите число от 18 до 99:

      Оператор группировки

      Оператор группировки "скобки" () контролирует приоритет вычисления выражений. Например, вы можете переопределить порядок - "умножение и деление, а потом сложение и вычитание", так чтобы, например, чтобы сложение выполнялось до умножения:

      Var a = 1; var b = 2; var c = 3; // обычный порядок a + b * c // 7 // выполняется, как обычно, так a + (b * c) // 7 // теперь поменяем порядок // сложение до умножения (a + b) * c // 9 // что эквивалентно следующему a * c + b * c // 9

      Упрощенный синтаксис создания массивов и генераторов

      Упрощенный синтаксис - экспериментальная возможность JavaScript, которая возможно будет добавлена в будущие версии ECMAScript. Есть 2 версии синтаксиса:

      Упрощенный синтаксис для массивов. (for (x of y) y) Упрощенный синтаксис для генераторов.

      Упрощенные синтаксисы существуют во многих языках программирования и позволяют вам быстро собирать новый массив, основанный на существующем. Например:

      ) i*i ]; // [ 1, 4, 9 ] var abc = [ "A", "B", "C" ]; ; // [ "a", "b", "c" ]

      Левосторонние выражения

      Значениям слева назначаются значения справа.

      new

      Вы можете использовать оператор new для создания экземпляра объекта пользовательского типа или одного из встроенных объектов. Используйте оператор new следующим образом:

      Var objectName = new objectType();

      super

      Ключевое слово используется, чтобы вызывать функции родительского объекта. Это полезно и с классами для вызова конструктора родителя, например.

      Super(); // вызывает конструктор родителя. super.functionOnParent();

      Оператор расширения

      Оператор расширения позволяет выражению расширяться в местах с множеством аргументов (для вызовов функций) или множестве элементов (для массивов).

      Пример: Сегодня, если у вас есть массив и вы хотите создать новый с существующей частью первого, то литерального синтаксиса массива уже не достаточно, и вы должны писать императивный (без вариантов) код, используя комбинацию push , splice , concat и т.д. Но с этим оператором код становится более коротким:

      Var parts = ["shoulder", "knees"]; var lyrics = ["head", ...parts, "and", "toes"];

      Похожим образом оператор работает с вызовами функций:

      Function f(x, y, z) { } var args = ; f(...args);



  • Есть вопросы?

    Сообщить об опечатке

    Текст, который будет отправлен нашим редакторам: