Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
икт 90.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
474 Кб
Скачать
☆

Типы данных JavaScript. Классы объектов в JavaScript. Объекты Date в JavaScript. Объекты Error в JavaScript.

Объекты Date в JavaScript – это класс объектов JavaScript, который предназначен для хранения и отображения даты и времени. Объект Date в JavaScript – это отдельный тип данных. Объект Date создается с помощью оператора new и конструктора Date ().

1

var time = new Date();

У объекта Date, как и у любого JavaScript объекта есть методы, с помощь которых можно устанавливать и отображать различные значения даты и времени. Дату и время в JavaScript можно преобразовывать в строку.

Объекты Error в JavaScript – это класс объектов JavaScript. Классы Error служат для представления ошибок (синтаксические ошибки, ошибки времени исполнения), обратите внимания: сюда не входят логические ошибки.

При возникновение ошибки в коде JavaScript программы интерпретатор обратится к одному из классов Error для оповещения пользователя об ошибке. У любого объекта Error есть свойство message, в котором хранится код ошибки и сообщение о ошибке(сообщение зависит от реализации языка JavaScript).

Типы объектов ошибок в JavaScript: Error, EvalError, RangeError, ReferenceError, SyntaxError, TypeError, URIError.

67. A scope of variables in JavaScript. To write a code,to make explanation.

(Область действия переменных в JavaScript. Для того, чтобы написать код, чтобы сделать объяснение.)

Область действия переменной (JavaScript)

 

В языке JavaScript имеется две области действия: глобальная и локальная.  Переменная, объявляемая вне определения функции, является глобальной, и ее значение доступно и может быть изменено в любом месте программы.  Переменная, объявляемая внутри определения функции, является локальной.  Она создается и уничтожается при каждом выполнении функции и не доступна никакому коду за пределами данной функции.  JavaScript не поддерживает область видимости блока (в которой пара фигурных скобок {. . .} определяет новую область), за исключением особого случая наличия переменных, видимых в пределах блока.  

Область в JavaScript

Локальная переменная может иметь такое же имя, как глобальная, но это совершенно разные переменные; изменение значения одной переменной не влияет на значение другой.  Внутри функции, где объявлена локальная переменная, имеет значение только эта локальная версия.  

JavaScript

// Global definition of aCentaur.

var aCentaur = "a horse with rider,";

// A local aCentaur variable is declared in this function.

function antiquities(){

var aCentaur = "A centaur is probably a mounted Scythian warrior";

}

antiquities();

aCentaur += " as seen from a distance by a naive innocent.";

document.write(aCentaur);

// Output: "a horse with rider, as seen from a distance by a naive innocent."

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

JavaScript

var aNumber = 100;

tweak();

function tweak(){

// This prints "undefined", because aNumber is also defined locally below.

document.write(aNumber);

if (false)

{

var aNumber = 123;

}

}

Когда программа JavaScript выполняет какую-либо функцию, сначала она находит все объявления переменных, например var someVariable;.  Она создает переменные с начальным значением undefined.  Если переменная объявлена с некоторым значением, например var someVariable = "something";, она все равно изначально создается со значением undefined, а объявленное значение принимает только при выполнении строки, содержащей это объявление.  

JavaScript обрабатывает все объявления переменных до выполнения любого кода независимо от того, находится ли объявление внутри условного блока или другой конструкции.  После того JavaScript обнаруживает все переменные, начинается выполнение кода функции.  Если переменная неявно объявлена внутри функции (т. е. находится в левой части выражения присваивания, но объявлена без ключевого слова var), она является глобальной.  

В JavaScript внутренняя (вложенная) функция сохраняет ссылки на локальные переменные, присутствующие в той же области, что и она сама, даже после того как эта функция возвращает результат.  Такой набор ссылок называется замкнутым выражением.  В следующем примере второй вызов внутренней функции выводит то же сообщение ("Hello Bill"), что и первый, так как входной параметр для внешней функции name является локальной переменной, находящейся в замкнутом выражении для внутренней функции.  

JavaScript

function send(name) {

// Local variable 'name' is stored in the closure

// for the inner function.

return function () {

sendHi(name);

}

}

function sendHi(msg) {

console.log('Hello ' + msg);

}

var func = send('Bill');

func();

// Output:

// Hello Bill

sendHi('Pete');

// Output:

// Hello Pete

func();

// Output:

// Hello Bill

Переменные, видимые в пределах блока

В Internet Explorer 11 предусмотрена поддержка переменных let и const, видимых в пределах блока.  Для этих переменных фигурные скобки {. . .} определяют новую область.  При присвоении одной из этих переменных конкретного значения это значение применяется только для области, в которой оно задано.  

В следующем примере показано использование переменной let и блоковой области.

Приведенный ниже код поддерживается в стандартном режиме Internet Explorer версии 11 и более поздних версий.

JavaScript

let x = 10;

var y = 10;

{

let x = 5;

var y = 5;

{

let x = 2;

var y = 2;

document.write("x: " + x + "<br/>");

document.write("y: " + y + "<br/>");

// Output:

// x: 2

// y: 2

}

document.write("x: " + x + "<br/>");

document.write("y: " + y + "<br/>");

// Output:

// x: 5

// y: 2

}

document.write("x: " + x + "<br/>");

document.write("y: " + y + "<br/>");

// Output:

// x: 10

// y: 2

Что выведет данный код?

function sum(a, b) {      s = a + b;      return s;  }    function product(a, b) {      var p = a * b;      return p;  }    s = 2;  p = 5;    p = sum(s, p);  s = product(p, s);    document.write("S = " + s + ", P = " + p); 

S = 14, P = 7

S = 49, P = 7

S = 14, P = 14

S = 49, P = 49

Пояснение: s = 2; p = 5; p = функция sum, выполняется действие s = s(2) + p(5) = 7 (в переменные s и p записывается число 7), дальше s = функция product, выполняется действие var p (новая переменная в функции) = p(7) * s(7) = 49 (в функции переменной p записывается число 49, затем return p, число 49 записывается в переменную s). document.write("S = 49, P = 7"); // S =49, P =7

Объявление переменных

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

function foo() {

a = 2;

b = 3;

return a+b;

}

alert(a); // undefined

a = 'очень важное значение';

alert(a); // очень важное значение

foo();

alert(a); // 2

Таким образом можно легко затереть лишнего. По-моему такое поведение абсолютно нелогично, но, что ж, это не самое странное место яваскрипта. В любом случае неявного определения переменных стоит избегать. Явно объявлять переменные можно и нужно ключевым словом var.

var a = 2;

Такая строка всегда создает новую локальную переменную. Если объявление происходит вне функций, то она будет глобальной, что вполне логично.

function foo() {

var a = 2;

var b = 3;

return a+b;

}

alert(a); // undefined

var a = 'очень важное значение';

alert(a); // очень важное значение

foo();

alert(a); // очень важное значение

Как объявить глобальную переменную из функции? Как обратиться к глобальной переменной, если есть локальная с таким же именем? Очень просто — нужно обратиться к ней как к свойству window:

function foo() {

var location = 'location';

alert(location); // вернет 'location'

alert(window.location); // вернет window.location

window.a = 'переменная из функции';

}

alert(a); // undefined

foo();

alert(a); // переменная из функции

Наследование области видимости

Меня всегда смущало то, что в Javascript можно определять функции внутри функций, а использовать их потом где угодно. Ну да, если посмотреть, точно то же самое можно делать в Ruby, и, наверное, во многих других языках тоже. Переменные при этом передаются очень просто: если на момент определения функции переменная существовала, то она будет существовать и внутри функции. Откуда бы ее не вызывали.

function alertOnTimeout(message, timeout) {

return setTimeout(function() {

// message будет доступен в безымянной функции, переданной таймауту

alert(message);

}, timeout);

}

68. Operations in JavaScript. To write a code, to make explanation.

Операций в JavaScript, существует 6 видов, в этом уроке мы рассмотрим 4 основных вида операций: 1. Операция присваивания (мы уже с ней знакомы), 2. Арифметические операции, 3. Операции сравнения, 4. Логические операции.

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

Когда мы инициализируем переменную (присваиваем ей значение) в JavaScript, мы используем операцию присваивания =. В языке JavaScript знак = означает присваивание.

var helloWorld;

helloWorld = "Привет Мир!";

Во второй строке, переменной helloWorld, с помощью операции присваивания =, было присвоено значение "Привет Мир!"

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

Арифметические операции — это обычные математические операции, которые все мы изучали в школе: + операция сложения, - операция вычитания, * операция умножения, / операция деления.

Напишем небольшую программу для сложения двух чисел:

var numberOne;

var numberTwo;

var numberSum;

numberOne = 5;

numberTwo = 7;

numberSum = numberOne + numberTwo;

alert(numberSum);

Создали три переменные numberOne, numberTwo и numberSum. Первым двум переменным numberOne и numberTwo присвоили значения 5 и 7, третьей переменной numberSum присвоили операцию сложения + с двумя первыми переменными. Эта операция numberOne + numberTwo (5 + 7), присвоит переменной numberSum значение 12

В последней строке, получили доступ к значению переменной numberSum, передав её в функцию alert(). В итоге у вас должно появится окошко с сообщением 12

Смотреть работу скрипта.

Поэкспериментируйте немного с этим скриптом, подставляя вместо операции сложения + другие арифметические операции, а вместо значений 5 и 7, другие числа.

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

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

Рассмотрим операции сравнения JavaScript: == операция равенства, === операция строго равенства, > операция больше, < операция меньше, >= операция больше или равно, <= операция меньше или равно, != операция неравенства, !== операция строго неравенства.

Рассмотрим примеры сравнения чисел: alert(5 == 5); — сообщение покажет true, alert(5 == 7); — сообщение покажет false, alert(5 > 7); — сообщение покажет false, alert(5 < 7); — сообщение покажет true, alert(5 >= 7); — сообщение покажет false, alert(5 <= 7); — сообщение покажет true, alert(5 >= 5); — сообщение покажет true, alert(5 != 5); — сообщение покажет false, alert(5 != 7); — сообщение покажет true.

Операции сравнения обычно применяются в операторах ветвления if, где в зависимсоти от того, что вернет операция true или false, запустится тот или иной блок кода.

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

Логические операции, анализируют результаты операций сравнения и на основе этих данных, выдают true или false.

Схема логической операции:

(операция равнения) логическая операция (операция сравения)

Рассмотрим логические операции JavaScript:

1. && логическая операция И, если обе операции сравнения вернут true, то логическая операция И тоже вернёт true, если хотя бы одна из операций сравнения вернёт false, то тогда и логическая операция И тоже вернёт false

2. || логическая операция ИЛИ, если одна или обе операции сравнения вернут true, то логическая операция ИЛИ тоже вернёт true, если обе операции сравнения вернут false, то тогда и логическая операция ИЛИ тоже вернёт false

Примеры логических операций:

(2 > 1)&&(4 == 4) Логическая операция &&, вернет true, поскольку обе операции сравнения верны и возвращают true.

(2 < 1)&&(4 == 4) Логическая операция &&, вернет false, поскольку одна из операций сравнения 2 < 1 не верна и возвращает false.

(2 < 1)&&(4 == 3) Логическая операция &&, вернет false, поскольку обе операции сравнения не верны и возвращают false.

(2 > 1)||(4 == 4) Логическая операция ||, вернет true, поскольку обе операции сравнения верны и возвращают true.

(2 > 1)||(4 == 3) Логическая операция ||, вернет true, поскольку одна из операций сравнения 2 > 1 верна и возвращает true.

(2 < 1)||(4 == 3) Логическая операция ||, вернет false, поскольку обе операции сравнения не верны и возвращают false.

Методы alert, prompt, confirm

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

Основные из них:

- alert(строка) – вызывает диалоговое окно с текстом (строка) и кнопкойOK.

- confirm(строка) – вызывает диалоговое окно с текстом (строка) и кнопкамиOKиCancel. Функция возвращает значениеtrue, если пользователь нажал кнопкуOKиfalse– если кнопкуCancel.

- prompt(строка, значение) – вызывает диалоговое окно с надписью "строка" и с полем для ввода текста ("значение" – устанавливается по умолчанию). Возвращает введенное пользователем тестовое значение.

Функции

Функции– один из основных способов объединения операторов в блоки. Функция представляет собой группу операторов, решающих какую-либо определенную задачу. ВJavaScriptфункции, не возвращающие результатов, можно рассматривать как процедуры.

Описание функции и ее вызов:

functionИмя_Функции (список формальных параметров)

{

тело функции;

return значение;

}

Рекомендуется определять функции в части HEADДля ускорения работы скрипта и, следовательно, просмотраWeb-страницы.

Команда вызова функции имеет вид:

Имя_Функции(список формальных параметров)

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

Имя_Функции.arguments[i],

где i– порядковый номер аргумента, начиная с нуля.

Общее число аргументов обозначено переменной Имя_Функции.arguments.length.Существует возможность вызывать функцию с большим количеством аргументов, чем она формально объявлена, используя массивarguments. Это бывает полезным, когда заранее не известно, сколько аргументов будет в функции. Схема проста: используя свойствоarguments.length, определяется число аргументов в функции, и затем организуется обращение к каждому аргументу при помощи массиваarguments.

<HTML>

<HEAD>

<SCRIPT Language=JavaScript>

function List (type, t)

{

document.write( '<' + type + 'L' + ' ' + t + '>');

for (var i = 2; i < arguments.length; i++)

document.write( '<LI' + arguments[i] + '</LI>');

document.write( '</' + type + 'L>');

}

</SCRIPT>

</HEAD>

<BODY>

<SCRIPT Language=JavaScript>

List('o', 'type=A', 'Пункт 1', 'Пункт 2', 'Пункт 3', 'Пункт 4', 'Пункт 5', 'Пункт 6', '123', '444', 'ещё один пункт', '1225', '1233э');

List('U', 'type=circle', '1', '2', '3', 'ещё один пункт', 'раз', 'два', 'три', 'четыре', 'new');

</SCRIPT>

</BODY>

</HTML>

// type– вид списка (символ)

// t– вид либо маркеров, либо нумерации

69. The conditional operations in JavaScript. To write a code, to make explanation?

Условные операторы позволяют пропустить или выполнить другие операторы в зависимости от значения указанного выражения. Эти операторы являются точками принятия решений в программе, и иногда их также называют операторами «ветвления».

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

Оператор if/else

Оператор if - это базовый управляющий оператор, позволяющий интерпретатору JavaScript принимать решения или, точнее, выполнять операторы в зависимости от условий. Оператор if имеет две формы. Первая:

if (выражение)

оператор

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

if (username == null) // Если переменная username равна null или undefined

username = "Alex"; // определить ее

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

Вторая форма оператора if вводит конструкцию else, выполняемую в тех случаях, когда выражение возвращает ложное значение. Ее синтаксис:

if (выражение)

оператор1

else

оператор2

Эта форма выполняет оператор1, если выражение возвращает истинное значение, и оператор2, если выражение возвращает ложное значение. Например:

if (n == 1)

console.log("Получено 1 новое сообщение.");

else

console.log("Получено " + n + " новых сообщений.");

Оператор else if

Оператор if/else вычисляет значение выражения и выполняет тот или иной фрагмент программного кода, а зависимости от результата. Но что если требуется выполнить один из многих фрагментов? Возможный способ сделать это состоит в применении оператора else if. Формально он не является самостоятельным оператором JavaScript; это лишь распространенный стиль программирования, заключающийся в применении повторяющегося оператора if/else:

if (n == 1) {

// Выполнить блок 1

}

else if (n == 2) {

// Выполнить блок 2

}

else if (n == 3) {

// Выполнить блок 3

}

else {

// Если ни один из предыдущих операторов else не был выполнен, выполнить блок 4

}

В этом фрагменте нет ничего особенного. Это просто последовательность операторов if, где каждый оператор if является частью конструкции else предыдущего оператора.

Оператор switch

Оператор if создает ветвление в потоке выполнения программы, а многопозиционное ветвление можно реализовать посредством нескольких операторов else if. Однако это не всегда наилучшее решение, особенно если все ветви зависят от значения одного и того же выражения. В этом случае расточительно повторно вычислять значение одного и того же выражения в нескольких операторах if.

Оператор switch предназначен именно для таких ситуаций. За ключевым словом switch следует выражение в скобках и блок кода в фигурных скобках:

switch(выражение) {

инструкции

}

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

Когда выполняется оператор switch, он вычисляет значение выражения, а затем ищет метку case, соответствующую этому значению (соответствие определяется с помощью оператора идентичности ===). Если метка найдена, выполняется блок кода, начиная с первой инструкции, следующей за меткой case. Если метка case с соответствующим значением не найдена, выполнение начинается с первой инструкции, следующей за специальной меткой default:. Если метка default: отсутствует, блок оператора switch пропускается целиком.

Работу оператора switch сложно объяснить на словах, гораздо понятнее выглядит объяснение на примере. Следующий оператор switch эквивалентен повторяющимся операторам if/else, показанным в предыдущем примере:

switch(n) {

case 1: // Выполняется, если n === 1

// Выполнить блок 1

break; // Здесь остановиться

case 2: // Выполняется, если n === 2

// Выполнить блок 2

break; // Здесь остановиться

case 3: // Выполняется, если n === 3

// Выполнить блок 3

break; // Здесь остановиться

default: // Если все остальное не подходит...

// Выполнить блок 4

break; // Здесь остановиться

}

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

В случае отсутствия операторов break оператор switch начнет выполнение блока кода с меткой case, соответствующей значению выражения, и продолжит выполнение операторов до тех пор, пока не дойдет до конца блока. В редких случаях это полезно для написания программного кода, который переходит от одной метки case к следующей, но в 99% случаев следует аккуратно завершать каждый блок case оператором break. (При использовании switch внутри функции вместо break можно использовать оператор return. Оба этих оператора служат для завершения работы оператора switch и предотвращения перехода к следующей метке case.)

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

function convert(x) {

switch(typeof x)

{

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

case 'number':

return x.toString(16);

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

case 'string':

return '"' + x + '"';

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

default:

return x.toString();

}

}

console.log(convert(1067)); // Результат "42b"

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

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

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

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

70. The conditional operations in JavaScript. To write a code, to make explanation?

Условные операторы позволяют пропустить или выполнить другие операторы в зависимости от значения указанного выражения. Эти операторы являются точками принятия решений в программе, и иногда их также называют операторами «ветвления».

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

Оператор if/else

Оператор if - это базовый управляющий оператор, позволяющий интерпретатору JavaScript принимать решения или, точнее, выполнять операторы в зависимости от условий. Оператор if имеет две формы. Первая:

if (выражение)

оператор

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

if (username == null) // Если переменная username равна null или undefined

username = "Alex"; // определить ее

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

Вторая форма оператора if вводит конструкцию else, выполняемую в тех случаях, когда выражение возвращает ложное значение. Ее синтаксис:

if (выражение)

оператор1

else

оператор2

Эта форма выполняет оператор1, если выражение возвращает истинное значение, и оператор2, если выражение возвращает ложное значение. Например:

if (n == 1)

console.log("Получено 1 новое сообщение.");

else

console.log("Получено " + n + " новых сообщений.");

Оператор else if

Оператор if/else вычисляет значение выражения и выполняет тот или иной фрагмент программного кода, а зависимости от результата. Но что если требуется выполнить один из многих фрагментов? Возможный способ сделать это состоит в применении оператора else if. Формально он не является самостоятельным оператором JavaScript; это лишь распространенный стиль программирования, заключающийся в применении повторяющегося оператора if/else:

if (n == 1) {

// Выполнить блок 1

}

else if (n == 2) {

// Выполнить блок 2

}

else if (n == 3) {

// Выполнить блок 3

}

else {

// Если ни один из предыдущих операторов else не был выполнен, выполнить блок 4

}

В этом фрагменте нет ничего особенного. Это просто последовательность операторов if, где каждый оператор if является частью конструкции else предыдущего оператора.

Оператор switch

Оператор if создает ветвление в потоке выполнения программы, а многопозиционное ветвление можно реализовать посредством нескольких операторов else if. Однако это не всегда наилучшее решение, особенно если все ветви зависят от значения одного и того же выражения. В этом случае расточительно повторно вычислять значение одного и того же выражения в нескольких операторах if.

Оператор switch предназначен именно для таких ситуаций. За ключевым словом switch следует выражение в скобках и блок кода в фигурных скобках:

switch(выражение) {

инструкции

}

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

Когда выполняется оператор switch, он вычисляет значение выражения, а затем ищет метку case, соответствующую этому значению (соответствие определяется с помощью оператора идентичности ===). Если метка найдена, выполняется блок кода, начиная с первой инструкции, следующей за меткой case. Если метка case с соответствующим значением не найдена, выполнение начинается с первой инструкции, следующей за специальной меткой default:. Если метка default: отсутствует, блок оператора switch пропускается целиком.

Работу оператора switch сложно объяснить на словах, гораздо понятнее выглядит объяснение на примере. Следующий оператор switch эквивалентен повторяющимся операторам if/else, показанным в предыдущем примере:

switch(n) {

case 1: // Выполняется, если n === 1

// Выполнить блок 1

break; // Здесь остановиться

case 2: // Выполняется, если n === 2

// Выполнить блок 2

break; // Здесь остановиться

case 3: // Выполняется, если n === 3

// Выполнить блок 3

break; // Здесь остановиться

default: // Если все остальное не подходит...

// Выполнить блок 4

break; // Здесь остановиться

}

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

В случае отсутствия операторов break оператор switch начнет выполнение блока кода с меткой case, соответствующей значению выражения, и продолжит выполнение операторов до тех пор, пока не дойдет до конца блока. В редких случаях это полезно для написания программного кода, который переходит от одной метки case к следующей, но в 99% случаев следует аккуратно завершать каждый блок case оператором break. (При использовании switch внутри функции вместо break можно использовать оператор return. Оба этих оператора служат для завершения работы оператора switch и предотвращения перехода к следующей метке case.)

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

function convert(x) {

switch(typeof x)

{

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

case 'number':

return x.toString(16);

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

case 'string':

return '"' + x + '"';

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

default:

return x.toString();

}

}

console.log(convert(1067)); // Результат "42b"

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

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

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

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

71. Cycles in JavaScript. To write a code, to make explanation.

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

Цикл while

Синтаксис цикла while:

Выражение в круглых скобках называется условием выполнения цикла или кратко условием. Сначала вычисляется значение выражения. Полученное значение, если необходимо, неявно преобразуется к булеву типу. Если результатом вычисления выражения является значение true, то инструкция, расположенная в теле цикла, выполняется, затем управление передаётся в начало цикла и условие вычисляется снова. Если результатом вычисления выражения является значение false, интерпретатор завершает работу цикла и переходит к выполнению инструкции следующей за циклом. Таким образом, интерпретатор снова и снова выполняет код расположенный в теле цикла, пока условие остаётся истинным:

1

2

3

4

5

6

var i = 0;

 

while (i < 3) {   // Выполнять код, пока значение переменной i меньше 3

  alert("i: " + i);

  i++;            // Увеличиваем значение переменной i

}

Цикл do-while

Синтаксис цикла do-while:

Цикл do-while похож на цикл while, за исключением того, что проверка условия выполнения цикла производится после первой итерации, а не перед ней, и завершается цикл точкой с запятой. Так как условие проверяется после итерации, код в теле цикла do-while всегда выполняются минимум один раз:

1

2

3

4

5

var count = 0;

do {

  document.write(count + " ");

  count++;

} while(count < 5);

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

Цикл for

Синтаксис цикла for:

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

  1. Первое выражение всегда вычисляется только один раз – перед первой итерацией. Поэтому обычно в качестве первого выражения выступает определение переменной, которая используется в условии выполнения цикла в качестве счётчика.

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

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

Пример цикла for:

1

2

for (var count = 0; count < 5; count++)

  document.write(count + " ");

Как видно из примера, цикл for в отличие от других циклов позволяет сгруппировать связанный с циклом код в одном месте.

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

1

2

3

4

5

6

7

8

9

10

var i = 0;

for (; i < 4; i++) ...

 

var i = 0;

for (; i < 4; ) ...

 

for (var i = 1; /* нет условия */ ; i++) ...

 

// Это эквивалентно следующему коду

for (var i = 1; true; i++) ...

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

1

2

3

4

5

// не выполнится, так как в проверке условия последнее выражение false

for (i = 1; i < 4, false; i++) ...

 

for (var i = 1, j = 5; i <= 5; i++, j--)

  document.write(i + " " + j +"<br>");

Цикл for-in

Цикл for-in используется для перебора в случайном порядке перечисляемых свойств объекта и имеет следующий синтаксис:

1

2

for (переменная in объект)

  инструкция;

Слева от ключевого слова in указывается имя переменной, которой перед началом каждой итерации цикла присваивается в виде строки имя одного из свойств объекта. Справа от ключевого слова in указывается объект, свойства которого будут перебираться циклом. Цикл будет выполняться до тех пор, пока не будут перебраны все доступные свойства. Если переменная, представляющая объект, будет иметь значение null или undefined цикл не выполнится ни разу:

1

2

3

4

5

var obj = {x: 5, y: 10};

 

for (var prop in obj) {

  alert(prop);

}

Чтобы связанный с циклом код был в одном месте, в цикле for-in допускается объявлять переменную. Поэтому, в качестве выражения перед ключевым словом in обычно выступает объявление переменной, которой будут присваиваться имена свойств.

72. Functions in JavaScript. To write a code, to make explanation.

Функции

Зачастую нам надо повторять одно и то же действие во многих частях программы.

Например, красиво вывести сообщение необходимо при приветствии посетителя, при выходе посетителя с сайта, ещё где-нибудь.

Чтобы не повторять один и тот же код во многих местах, придуманы функции. Функции являются основными «строительными блоками» программы.

Примеры встроенных функций вы уже видели – это alert(message), prompt(message, default) и confirm(question). Но можно создавать и свои.

Объявление

Пример объявления функции:

function showMessage() {

alert( 'Привет всем присутствующим!' );

}

Вначале идет ключевое слово function, после него имя функции, затем список параметров в скобках (в примере выше он пустой) и тело функции – код, который выполняется при её вызове.

Объявленная функция доступна по имени, например:

function showMessage() {

alert( 'Привет всем присутствующим!' );

}

showMessage();

showMessage();

Этот код выведет сообщение два раза. Уже здесь видна главная цель создания функций: избавление от дублирования кода.

Если понадобится поменять сообщение или способ его вывода – достаточно изменить его в одном месте: в функции, которая его выводит.

Функции в JavaScript

Функции - ключевая концепция в JavaScript. Важнейшей особенностью языка является первоклассная поддержка функций​ (functions as first-class citizen). Любая функция это объект, и следовательно ею можно манипулировать как объектом, в частности:

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

  • создавать анонимно и присваивать в качестве значений переменных или свойств объектов

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

Функция в JavaScript

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

Для понимания работы функций необходимо (и достаточно?) иметь представление о следующих моментах:

  • способы объявления 

  • способы вызова 

  • параметры и аргументы вызова (arguments)

  • область данных (Scope) и замыкания (Closures)

  • объект привязки (this)

  • возращаемое значение (return)

  • исключения (throw)

  • использование в качестве конструктора объектов

  • сборщик мусора (garbage collector)

Объявление функций

Функция (как и всякий объект) должна быть объявлена(определена, define) перед её использованием. 

Объявление(определение) функции - указание сигнатуры и тела функции:

  • сигнатура - имя(необязательно) и список входных формальных параметров 

  • тело функции - комбинация управляющих конструкций и выражений языка над внешними и локальными данными

Объявление пользовательской функции всегда находится в теле некоторой внешней функции-контейнера, которая, в свою очередь, возможно также вложена в некоторую функцию. Цепочка всех таких внешних функций, вложенных друг в друга, образует лексический диапазон функции. 

Во избежание оговорок о глобальных переменных и функциях, удобно полагать, что программа на языке JavaScript представляет собой тело неявной функции [[ main]]().

Существует три способа объявить функцию:

73. Objects in JavaScript. To write a code, to make explanation.

Объекты Javascript в примерах

  1. Создание и работа со свойствами

    1. Создание объекта

    2. Добавление свойств

    3. Доступ к свойствам

    4. Удаление свойств

    5. Расширенное создание

  2. Методы объектов

    1. Добавление метода

    2. Доступ к объекту из метода

    3. Перебор свойств объекта

Объекты (они же - ассоциативные массивы, хэши) и работа с ними в Javascript - реализованы не так, как в большинстве языков. С этим связано много ошибок и непоняток.

В этой статье описаны базовые свойства объектов javascript, создание и изменение, перечисление свойств и т.п.

Объект в javascript представляет собой обычный ассоциативный массив или, иначе говоря, "хэш". Он хранит любые соответствия "ключ => значение" и имеет несколько стандартных методов.

Метод объекта в javascript - это просто функция, которая добавлена в ассоциативный массив. Далее - подробнее.

Создание и работа со свойствами