НазадВперёд |
Ядро JavaScript 1.5. Справочник. |
В этой главе рассматриваются все операторы JavaScript.
Оператор JavaScript
состоит из ключевого слова, используемого с соответствующим синтаксисом.
Один оператор может занимать несколько строк. несколько операторов могут занимать
одну строку, отделённые один от другого знаком "точка с запятой".
Соглашения по синтаксису: все ключевые слова показаны жирным шрифтом. Слова
шрифта italic представляют определяемые пользователем имена или операции. Части
в квадратных скобках [ ] являются необязательными.
{statements} это блок операторов, который может состоять из 0 или более операторов и заключён в
фигурные скобки { }.
В таблице перечислены операторы JavaScript.
break |
Прерывает текущий цикл |
const |
Объявляет глобальную константу, инициализируя её (по выбору/optionally) значением. |
continue |
Прерывает выполнение блока операторов в цикле |
do...while |
Выполняет операторы, пока тестовое условие не станет false. Операторы выполняются как минимум один раз. |
export |
Даёт возможность обозначенному/signed скрипту предоставлять свойства, функции и объекты другим обозначенным или необозначенным/unsigned скриптам. |
for |
Создаёт цикл из трёх необязательных выражений, заключённых в скобки и разделённых точкой с запятой, с последующим блоком операторов, выполняемых циклически. |
for...in |
Итерирует специфицированную переменную по всем свойствам объекта. Для каждого отдельного свойства JavaScript выполняет специфицированные операторы. |
function |
Объявляет функцию со специфицированными параметрами. В качестве параметров могут быть строки, числа и объекты. |
if...else |
Выполняет набор операторов, если специфицированное условие true. Если условие false, может быть выполнен другой набор операторов. |
import |
Позволяет скрипту импортировать свойства, функции и объекты из обозначенного/signed скрипта, который экспортирует информацию. |
label |
Идентификатор, который может использоваться совместно с |
return |
|
switch |
Даёт возможность программе вычислять выражение и искать совпадение
значения выражения с меткой |
throw |
|
try...catch |
Помечает блок операторов для попытки выполнения и специфицирует ответ, который должен выполняться при возникновении исключения. |
var |
Объявляет переменную, инициализируя её, по выбору, значением. |
while |
Создаёт цикл, который вычисляет выражение, и, если оно true, выполняет блок операторов. Затем цикл повторяется до тех пор, пока специфицированное условие true. |
with |
Устанавливает объект по умолчанию для набора выполняемых операторов. |
Оператор break
используется для прерывания выполнения операторов цикла, switch
или label
.
Прерывает выполнение операторов цикла, switch
или label
и передаёт управление оператору, следующему после прерванного цикла.
ECMA-262 (для непомеченной/unlabeled версии) |
label |
Оператор break
содержит необязательный лэйбл/label, который
позволяет программе прерывать помеченный оператор. Операторы в помеченном
операторе могут быть любого типа.
В этой функции имеется оператор break
,
прерывающий выполнение цикла while
,
если e
равно 3, и возвращающий затем значение 3 * x
.
function testBreak(x) {
var i = 0;
while (i < 6) {
if (i == 3)
break;
i++;
}
return i*x;
}
Объявляет именованную константу только-для-чтения.
JavaScript 1.5, NES 6.0 (расширение Netscape, только C-машина). |
const constname [= value] [..., constname [= value] ]
varname |
Имя константы. Оно может быть любым разрешённым идентификатором. |
value |
Значение константы. Оно может быть любым разрешённым выражением. |
Создаёт константу, которая может быть глобальной или локальной по отношению к функции, в которой объявляется. Константы следуют тем же правилам области видимости, что и переменные.
Значение константы не может быть изменено с помощью присвоения, и константа не может быть переобъявлена.
Константа не может иметь то же имя, что и функция или переменная в той же области видимости.
document.writeln("a равно " + a + ".");
Рестарт оператора while
, do-while
, for
,
или label
.
ECMA-262 (для непомеченной/unlabeled версии) |
label |
По контрасту с оператором break
, continue
не прерывает полностью выполнение оператора. Вместо этого он:
Оператор continue
может теперь содержать
необязательный лэйбл, который позволяет программе прерывать выполнение
помеченного оператора и продолжить выполнение специфицированного помеченного
оператора. Этот тип continue
обязан находиться в операторе цикла,
идентифицированном лэйблом, используемым оператором continue
.
Это цикл while
, с оператором
continue
, выполняемым, если i имеет значение 3.
Таким образом, n
принимает значения 1, 3, 7 и 12.
i = 0;
n = 0;
while (i < 5) {
i++;
if (i == 3)
continue;
n += i;
}
С это примере оператор, помеченный checkiandj, содержит оператор, помеченный checkj.
Если обнаружен continue
, программа продолжает от верхней точки оператора checkj.
Каждый раз при обнаружении continue
, checkj
повторяет итерацию,
пока условие не вернёт false. Если false возвращено, выполняется оставшаяся
часть оператора checkiandj. checkiandj
повторяет итерацию, пока
условие не вернёт false. Если false возвращено, программа продолжает выполняться
с точки после оператора checkiandj.
Если continue
имеет метку из checkiandj,
программа будет продолжать выполняться от верхней точки оператора checkiandj.
checkiandj :
while (i<4) {
document.write(i + "<BR>");
i+=1;
checkj :
while (j>4) {
document.write(j + "<BR>");
j-=1;
if ((j%2)==0)
continue checkj;
document.write(j + " is odd.<BR>");
}
document.write("i = " + i + "<br>");
document.write("j = " + j + "<br>");
}
Выполняет специфицированные операторы, пока при тестировании условия не будет возвращено false. Операторы выполняются как минимум однократно.
do
statements
while (condition);
Цикл do loop
итерирует минимум один раз и
повторяет итерации, пока i
не меньше 5.
do {
i+=1;
document.write(i);
while (i<5);
Позволяет обозначенному/signed скрипту предоставлять свойства, функции и объекты другим обозначенным или необозначенным/unsigned скриптам.
Эта возможность отсутствует в ECMA 262, Edition 3.
export name1, name2, ..., nameN
export *
nameN |
|
* |
Экспортируются все свойства, функции и объекты этого скрипта. |
Обычно информация в обозначенном/signed скрипте доступна
только скриптам, обозначенным теми же принципалами/principals (найду перевод
поточнее - заменю прим перев.). Экспортируя свойства, функции или объекты,
обозначенный скрипт делает эту информацию доступной любому скрипту (signed или unsigned).
Получающий скрипт использует оператор import
для доступа к информации.
Создаёт цикл из трёх необязательных выражений, заключённых в скобки и разделённых точкой с запятой, и блока операторов , выполняемых в цикле.
for ([initial-expression]; [condition]; [increment-expression])
{
statements
}
Здесь оператор for
начинается с объявления
переменной i и её инициализации в 0. Он проверяет, что i меньше 9,
выполняет два последующих оператора и увеличивает i на 1 после каждого прохода по циклу.
for (var i = 0; i < 9; i++) {
n += i;
myfunc(n);
}
Итерирует специфицированную переменную по всем свойствам объекта. Для каждого выделенного свойства JavaScript выполняет специфицированные операторы.
for (variable in object) {
statements
}
variable |
Переменная для итерации по каждому свойству, может быть объявлена ключевым
словом |
object |
|
statements |
Здесь функция принимает в качестве аргументов объект и имя объекта . Затем выполняется итерация по всем свойствам объекта и возвращает строку со списком имён свойств и их значений.
function show_props(obj, objName) {
var result = "";
for (var i in obj) {
result += objName + "." + i + " = " + obj[i] + "\n";
}
return result;
}
Объявляет функцию со специфицированными параметрами. В качестве параметров принимаются строки, числа и объекты.
JavaScript 1.5, NES 6.0: добавлено объявление условной функции (расширение Netscape). |
|
function name([param] [, param] [..., param]) {
statements
}
Вы можете также определять функции с помощью конструктора Function
и оператора function
; см. Function
и function
.
name | |
param |
Имя аргумента, передаваемого функции. Функция может иметь не более 255 аргументов. |
statements |
Чтобы возвращать значение, функция обязана иметь оператор return
,
который специфицирует возвращаемое значение.
Функция, созданная с помощью оператора function
,
является объектом Function
и содержит все свойства, методы и поведение
объектов Function
. См. в Function
детальную информацию о функциях.
Netscape поддерживает условное объявление функций, когда функция может быть объявлена на базе вычисления некоторого условия. Если условие true, функция объявляется. Иначе - не объявляется.
Функция может быть также объявлена внутри выражения. В этом случае функция обычно анонимна. См...
Этот код объявляет функцию, которая возвращает общую сумму от продаж в долларах, если задано количество проданных единиц продуктов a, b и c.
function calc_sales(units_a, units_b, units_c) {
return units_a*79 + units_b*129 + units_c*699
}
В следующем скрипте функция one всегда объявляется. Функция zero объявляется,
поскольку 'if(1)'
вычисляется в true:
<SCRIPT language="JavaScript1.5">
<!--
function one()
document.writeln("This is one.");
if (1)
function zero()
{
document.writeln("This is zero.");
}
}
</SCRIPT>
Однако, если скрипт изменяется таким образом, что условие становится 'if (0)', функция zero не объявляется и не может быть вызвана.
Выполняет набор операторов, если специфицированное условие true. Если условие false, может быть выполнен другой набор операторов.
if (condition) {
statements1
}
[else {
statements2
}]
Вы не должны использовать операции присвоения в условном операторе. Например, не используйте такой код:
if(x = y)
{
/* делайте правильно */
}
Если Вам необходимо использовать присвоение в условном операторе, добавьте дополнительные скобки вокруг операции присвоения. Например, if( (x = y) ).
if (cipher_char == from_char) {
result = result + to_char
x++}
else
result = result + clear_char
Даёт возможность скриптам импортировать свойства, функции и объекты из обозначенного/signed скрипта, экспортирующего информацию.
Эта возможность отсутствует в ECMA 262, Edition 3.
import objectName.name1, objectName.name2, ..., objectName.nameN
import objectName.*
objectName | |
name1, | Список импортируемых из файла экспорта свойств, функций и объектов . |
* |
Импортируются все свойства, функции и объекты их экспортирующего скрипта. |
Параметр objectName это имя объекта, который будет получать импортируемые имена. Например, если f и p экспортируются и если obj это объект импортирующего скрипта, следующий код делает f и p доступными в импортирующем скрипте как свойства объекта obj.
Обычно информация в обозначенном/signed скрипте доступна
только скриптам, обозначенным теми же принципалами/principals. Экспортируя (используя
оператор export
) свойства, функции и объекты,
обозначенный скрипт делает эту информацию доступной любому скрипту (signed или unsigned).
Импортирующий скрипт использует оператор import
для доступа к этой информации.
Скрипт обязан загрузить экспортирующий скрипт в окно, фрэйм или слой/layer, прежде чем сможет импортировать и использовать любые экспортируемые свойства, функции и объекты.
Предоставляет оператор с идентификатором,
позволяющим ссылаться на этот оператор из break
или continue
.
Например, Вы можете использовать метку для идентификации
цикла, а затем использовать операторы break
или continue
для прерывания или продолжения выполнения цикла.
Пример помеченного оператора, использующего break
,
см. в break
. Пример помеченного оператора,
использующего continue
, см. в continue
.
Специфицирует значение, возвращаемое функцией.
expression |
Следующая функция возвращает квадрат своего аргумента x
,
где x
это число.
function square(x) {
return x * x;
}
Позволяет программе вычислять выражение и попытаться
сопоставить его значение с меткой case
.
switch (expression){
case label :
statements;
break;
case label :
statements;
break;
...
default : statements;
}
expression |
|
label | |
statements |
Блок операторов, выполняемый однократно при совпадении |
Если совпадение найдено, программа выполняет
ассоциированный оператор. Если несколько case
совпадают с предоставленным
значением, выбирается первый совпавший case
, даже если все эти case
не равны один другому.
Программа сначала ищет метку/label, совпадающую со
значением expression
/выражения, а затем выполняет ассоциированный оператор. Если
ни один лэйбл не совпал, программа ищет необязательный оператор default
и, если он найден, выполняет ассоциированный оператор. Если оператор default
не найден, программа продолжает выполняться с оператора после конца блока switch
.
Необязательный оператор break
,
ассоциированный с каждой меткой case
, гарантирует что прервёт выполнение блока switch
,
после того как совпадающий оператор будет выполнен, и продолжит выполнение с
оператора, идущего после блока switch
. Если break
опущен, программа продолжает выполнение с оператора, следующего после оператора switch
.
Если expression вычисляется до "Bananas", программа ищет
совпадение этого значения с case
"Bananas" и выполняет ассоциированный оператор.
Если обнаружен break
, программа прерывает
выполнение блока switch
и выполняет оператор, идущий после switch
.
Если break
отсутствует, оператор для case
"Cherries" также будет выполнен.
switch (i) {
case "Oranges" :
document.write("Oranges are $0.59 a pound.<BR>");
break;
case "Apples" :
document.write("Apples are $0.32 a pound.<BR>");
break;
case "Bananas" :
document.write("Bananas are $0.48 a pound.<BR>");
break;
case "Cherries" :
document.write("Cherries are $3.00 a pound.<BR>");
break;
default :
document.write("Sorry, we are out of " + i + ".<BR>");
}
document.write("Is there anything else you'd like?<BR>");
Вызывает определяемое пользователем исключение.
expression |
Использование оператора 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); // передаёт объект исключения
обработчику ошибок
}
Здесь тестируется строка для ввода zip-кода США. Если zip-код
использует неверный формат, оператор throw
вызывает исключение, создавая объект типа ZipCodeFormatException.
/*
* Создаётся объект ZipCode.
*
* Принимаемые форматы zip-кода:
* 12345
* 12345-6789
* 123456789
* 12345 6789
*
* Если аргумент, передаваемый ZipCode-конструктору, не соответствует
* одному из этих патэрнов, вызывается исключение.
*/
function ZipCode(zip) {
zip = new String(zip);
pattern = /[0-9]{5}([- ]?[0-9]{4})?/;
if (pattern.test(zip)) {
// значением zip-кода будет первое найденное
совпадение в строке
this.value = zip.match(pattern)[0];
this.valueOf = function (){return this.value};
this.toString = function (){return String(this.value)};
} else {
throw new ZipCodeFormatException(zip);
}
}
function ZipCodeFormatException(value) {
this.value = value;
this.message =
"does not conform to the expected format for a zip code";
this.toString =
function (){return this.value + this.message};
}
/*
* Эти строки могут находиться в скрипте, проверяющем данные адреса
* для адресов США.
*/
var ZIPCODE_INVALID = -1;
var ZIPCODE_UNKNOWN_ERROR = -2;
function verifyZipCode(z) {
try {
z = new ZipCode(z);
}
catch (e) {
if (e instanceof ZipCodeFormatException) {
return ZIPCODE_INVALID;
}
else {
return ZIPCODE_UNKNOWN_ERROR;
}
}
return z;
}
a=verifyZipCode(95060); //
возвращает 95060
b=verifyZipCode(9560;) //
возвращает -1
c=verifyZipCode("a"); //
возвращает -1
d=verifyZipCode("95060"); // возвращает 95060
e=verifyZipCode("95060 1234"); // возвращает 95060 1234
Вы можете использовать throw
для повторного вызова
исключения после его отлова. Следующий пример отлавливает исключение с числовым
значением и вызывает его повторно, если его значение больше 50. Повторно
вызванное исключение передаётся в содержащую функцию, или на верхний уровень так, чтобы пользователь увидел его.
try {
throw n // вызывает исключение с числовым значением
}
catch (e) {
if (e <= 50) {
// операторы для обработки исключений 1-50
}
else {
// не может обработать это исключение,
поэтому вызывает его повторно
throw e
}
}
Помечает блок операторов для попытки выполнения и
специфицирует ответ, который должен выполняться, если вызывается исключение.
JavaScript 1.5, NES 6.0: добавлены множественные блоки |
|
try {
statements
}
[catch (exception_var if expression)
{statements}] . . .
[catch (exception_var) {statements}]
[finally {statements}]
Оператор 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. См. в книге
"Ядро JavaScript. Руководство по
Использованию" информацию об исключениях Java.
catch
.
Если используется единственный безусловный блок catch
, то вход в блок catch
выполняется при вызове исключения. Например, это код вызывает исключение. Если
исключение возникает, управление передаётся в блок catch
.
try {
throw "myException" // генерирует исключение
}
catch (e) {
// операторы для обработки любого исключения
logMyErrors(e) // объект исключения передаётся обработчику
ошибок
}
catch
.
Вы можете использовать один или несколько блоков 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) // передаёт объект исключения обработчику
исключений
}
Если исключение вызывается в блоке try
, exception_var
содержит значение, специфицированное оператором throw
; Вы можете
использовать этот идентификатор для получения информации о вызванном исключении.
JavaScript
создаёт этот идентификатор при входе в блок catch
; этот идентификатор
существует только в период работы блока catch
; после того как блок catch
завершает выполнение, идентификатор становится недоступным.
finally
. Блок finally
содержит операторы, выполняемые после
выполнения блоков try
и catch
, но перед операторами, идущими после
оператора try...catch
. Блок finally выполняется независимо от
того, было ли вызвано исключение. Если исключение вызывается, оператор в блоке finally
выполняется даже тогда, когда ни один блок catch
не обработал исключение.
Вы можете использовать блок finally
для того,
чтобы Ваш скрипт "изячно" завершался при возникновении исключения; например,
может понадобиться освободить ресурс, задействованный скриптом. В следующем
примере файл открывается, и выполняются операторы, использующие этот файл (серверный JavaScript
позволяет получить доступ файлам). Если исключение вызывается при открытом файле,
блок finally
закрывает файл до краха скрипта.
openMyFile()
try {
// связывается ресурс
writeMyFile(theData)
}
finally {
closeMyFile() // всегда закрывает ресурс
}
См. примеры для throw
.
Объявляет переменную, инициализируя её (по выбору) значением.
var varname [= value] [..., varname [= value] ]
varname | |
value | Начальное значение переменной, может быть любым верным выражением. |
Областью видимости переменной является текущая функция или, для переменных, объявленных вне функции, текущее приложение.
Использование var
вне функции не обязательно, но
рекомендуется; Вы можете объявить переменную, просто присвоив ей значение.
Однако использование var
является хорошим стилем и является необходимой в
функции в следующих ситуациях:
Создаёт цикл, вычисляющий выражение, и, если оно true,
выполняет блок операторов. Затем цикл повторяется, пока специфицированное условие true.
while (condition) {
statements
}
Следующий цикл while
итерирует, пока n меньше трёх:
n = 0;
x = 0;
while(n < 3) {
n ++;
x += n;
}
При каждой итерации цикла n
увеличивается и
прибавляется к x. Следовательно, x
и n
принимают следующие значения:
После завершения третьего прохода цикла, условие n < 3 больше не true, поэтому цикл прерывается.
Устанавливает объект по умолчанию для набора операторов.
object |
Специфицирует для операторов объект по умолчанию. Скобки вокруг |
statements |
JavaScript просматривает все неквалифицированные имена в наборе операторов для определения того, являются ли имена свойствами объекта по умолчанию. Если неквалифицированное имя соответствует свойству, это свойство используется в операторе; иначе используется локальная или глобальная переменная.
Обратите внимание, что использование оператора with
значительно замедлит работу кода. Если скорость работы является критичной, не используйте этот оператор.
Следующий оператор специфицирует, что объект Math
это объект по умолчанию. Операторы в блоке with
обращаются к свойству PI
и методам cos
и sin
без специфицирования объекта. JavaScript принимает для этих ссылок объект Math
.
var a, x, y
var r=10
with (Math) {
a = PI * r * r
x = r * cos(PI)
y = r * sin(PI/2)
}
Copyright © 2000
Дата последнего обновления: 28 сентября 2000 г.