Управляющие инструкции

См. подтемы:

 

break, const, continue, do/while,export, for, for/in, if, if/else, import, label, return, switch/case, throw, try/catch, while и with.


breakNN 2  IE J1  ECMA 1

Останавливает текущий цикл и передаёт управление следующей инструкции сценария после данного цикла. Обратите внимание, что без параметра label, область выполнения break - его собственный цикл. Чтобы избежать вложенного цикла, назначите метки на каждый вложенный уровень, и, желательно, используйте метку перед оператором завершения. См. инструкцию метки (доступно только с Navigator 4 и Internet Explorer 4).

 
Синтаксис:
break [label]
 
Пример:

function testBreak(x) {
var i = 0;
while (i < 6) {
if (i == 3)
break;
i++;
}
return i*x;
}

В этой функции имеется оператор break, прерывающий выполнение цикла while, если e равно 3, и возвращающий затем значение 3*x.

См. "label".


const JavaScript 1.5, NES 6.0 (расширение Netscape, только C-машина).

Объявляет именованную константу только-для-чтения.

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

Значение константы не может быть изменено с помощью присвоения, и константа не может быть переобъявлена.

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

 
Синтаксис:
const constname [= value] [..., constname [= value] ]
 

Пример:

Скрипт:

const a = 7;
document.writeln("a равно " + a + ".");

даёт на выходе:

a равно 7


continue NN 2  IE J1  ECMA 1

Останавливает текущую итерацию цикла и возвращает управление к вершине цикла для следующей итерации (выполняющийся выражение обновляется, если определено в цикле for). Если Вы используете вложенные конструкции цикла, назначаете метки на каждый вложенный уровень и используете метку как параметр с продолжающейся инструкцией. См. инструкцию label (доступно только с Navigator 4 и Internet Explorer 4).

 
Синтаксис:
continue [label]
 

Пример:

outerLoop:
for (var i = 0; i <= maxValue1; i++) {
    for (var j = 0; j <= maxValue2; j++) {
        if (j*i == magic2) {
            continue outerLoop
        }
    }
}


do/while NN 4  IE J3  ECMA n/a

Выполняет инструкции, определённые в цикле, пока условие true. Поскольку условие проверяется в конце цикла, инструкции внутри цикла выполняются по крайней мере 1 раз. Обязательно, чтобы выражение, которое составляет условие, имело некоторый аспект, изменяемый далее в инструкции цикла. Иначе происходит бесконечный цикл .

 
Синтаксис:
do { инструкции } while (условие)
 

Пример:

var i = 1
do {
    window.status = "Loop number " + i++
} while (i <= 10)
window.status = ""


export JavaScript 1.2, NES 3.0

Позволяет подписанному скрипту предоставлять свойства, функции и объекты другим подписанным или неподписанным скриптам. Экспортируя свойства, функции или объекты, обозначенный скрипт делает эту информацию доступной любому скрипту (signed или unsigned). Получающий скрипт использует оператор import для доступа к информации.

 
Синтаксис:
export name1, name2, ..., nameN
export *
 

Пример:

var i = 1
do {
    window.status = "Loop number " + i++
} while (i <= 10)
window.status = ""


for NN 2  IE J1  ECMA 1

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

 
Синтаксис:
for ([Начальное значение ]; [условие]; [Инструкция обновления]) { инструкции }
 

Пример:

var userEntry = document.forms[0].entry.value
var oneChar
for (var i = 0; i < userEntry.length; i++) {
    oneChar = userEntry.charAt(i)
    if (oneChar < "0" || oneChar > "9") {
        alert("The entry must be numerals only.")
    }
}


for/in NN 2  IE J1  ECMA 1

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

Оператор for…in выполняется следующим образом:

  1. Переменной присваивается имя очередного свойства объекта или очередного элемента массива (это зависит от того, является значением выражения объект или массив).
  2. Выполняется оператор.
  3. Управление передается этапу 1.

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

 
Синтаксис:
for (переменная in объект) { инструкции }
 

Пример:

function showProps() {
    objName = "image"
    obj = document.images[0]
    var msg = ""
    for (var i in obj) {
        msg += objName + "." + i + "=" + obj[i] + "\n"
    }
    alert(msg)
}


if NN 2  IE J1  ECMA 1

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

 
Синтаксис:
if (условие) { инструкции, если условие true }
 

Пример:

if (myDateObj.getMonth() == 1) {
    calcMonthLength()
}


if/else NN 2  IE J1  ECMA 1

Условная инструкция, которая предусматривает два пути выполнения в зависимости от результата проверки условия. Вы можете вкладывать другие инструкции if или if/else внутрь инструкции if/else .

 
Синтаксис:
if (условие) { инструкции, если условие true } else { инструкции, если условие false }
 

Пример:

var theMonth = myDateObj.getMonth()
if (theMonth == 1) {
    monLength = calcLeapMonthLength()
} else {
    monLength = calcMonthLength(theMonth)
}


import JavaScript 1.2, NES 3.0

Даёт возможность скриптам импортировать свойства, функции и объекты из обозначенного/signed скрипта, экспортирующего информацию.

Обычно информация в обозначенном/signed скрипте доступна только скриптам, обозначенным теми же принципалами/principals. Экспортируя (используя оператор export) свойства, функции и объекты, обозначенный скрипт делает эту информацию доступной любому скрипту (signed или unsigned). Импортирующий скрипт использует оператор import для доступа к этой информации.

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

 
Синтаксис:
import objectName.name1, objectName.name2, ..., objectName.nameN
import objectName.*
 

Пример:

Например, если f и p экспортируются и если obj это объект импортирующего скрипта, следующий код делает f и p доступными в импортирующем скрипте как свойства объекта obj.

import obj.f, obj.p


label NN 4  IE J3  ECMA n/a

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

метка:
оператор

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

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

 
Синтаксис:
LabelName:
 

Пример:

outerLoop:
for (var i = 0; i <= maxValue1; i++) {
    for (var j = 0; j <= maxValue2; j++) {
        if (i == magic1 && j == magic2) {
            break outerLoop
        }
    }
}


return NN 2  IE J1  ECMA 1

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

 
Синтаксис:
return [value]
 

Пример:

function validateNumber(form) {
    var oneChar
    for (var i = 0; i < userEntry.length; i++) {
        oneChar = form.entry.value.charAt(i)
        if (oneChar < "0" || oneChar > "9") {
            return false
        }
    }
    return true
}


switch/case NN 4  IE J3  ECMA n/a

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

 
Синтаксис
switch (выражение) { case метка1: инструкции [break] case метка2: инструкции [break] ... [default: инструкции] }
 

Пример:

var productList = document.forms[0].prodList
var chosenItem = productList.options[productList.selectedIndex].value
switch(chosenItem) {
    case "Small Widget":
        document.forms[0].price.value = "44.95"
        break
    case "Medium Widget":
        document.forms[0].price.value = "54.95"
        break
    case "Large Widget":
        document.forms[0].price.value = "64.95"
        break
    default:
        document.forms[0].price.value = "Nothing Selected"
}


throw JavaScript 1.4, ECMA-262 Edition 3

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

 
Синтаксис
throw выражение;
 

Пример:

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

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

function UserException (message) {
this.message=message;
this.name="UserException";
}
function getMonthName (mo) {
mo=mo-1; // Уточняет число month относительно индекса массива (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 {
myUserException=new UserException("InvalidMonthNo");
throw myUserException;
}
}

try {
// операторы для try;
monthName=getMonthName(myMonth)
}
catch (e) {
monthName="unknown";
logMyErrors(e.message,e.name); // передаёт объект исключения обработчику ошибок
}


try/catch JavaScript 1.4, ECMA-262 Edition 3

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

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

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

Вы можете также использовать оператор try...catch для обработки исключений Java.

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

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

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

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

 
Синтаксис
try {
инструкции
}
[catch (переменная_исключения if выражение)
{инструкции}] . . .
[catch (переменная_исключения) {инструкции}]
[finally {инструкции}]

 

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

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

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

try {
myroutine(); // может вызывать три исключения
}
catch (e if e instanceof TypeError) {
// операторы для обработки исключений TypeError
}

catch (e if e instanceof RangeError) {
// операторы для обработки исключений RangeError
}

catch (e if e instanceof EvalError) {
// операторы для обработки исключений EvalError
}

catch (e){
// операторы для обработки любого неспецифицированного исключения
logMyErrors(e) // передаёт объект исключения обработчику исключений
}


while NN 2  IE J1  ECMA 1

Выполняет инструкции цикла, пока условие истинно. Условие проверяется в начале цикла. Обязательно, чтобы выражение, которое составляет условие, имело некоторый аспект, потенциально изменяемый в инструкции. Иначе происходит бесконечный цикл.

 
Синтаксис:
while (условие) { инструкции }
 

Пример:

var i = 0
while (!document.forms[0].radioGroup[i].checked) {
    i++
}
alert("You selected item number " + (i+1) + ".")


with NN 2  IE J1  ECMA 1

Инструкция with добавляет объект к области каждой инструкции, вложенной в неё.

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

Обратите внимание, что использование оператора with значительно замедлит работу кода. Если скорость работы является критичной, не используйте этот оператор.

 

 
Синтаксис:
with (ссылка на объект) { инструкции }
 

Пример:

with (document.forms[0]) {
    name1 = firstName.value
    name2 = lastName.value
    mail = eMail.value
}



HIVE: All information for read only. Please respect copyright!
Hosted by hive КГБ: Киевская городская библиотека