Windows Script Host для Windows 2000/XP
Приложение 1. Справочник по языку JScript
Язык JScript — это разработанный Microsoft интерпретируемый объектно-ориентированный язык сценариев, который первоначально предназначался для создания динамических HTML-страниц. Отметим, что JScript не является урезанной версией какого-либо другого языка программирования, хотя по синтаксису он похож на языки Java и С. В этом приложении мы кратко рассмотрим те возможности и свойства JScript, которые могут потребоваться при составлении сценариев, выполняемых с помощью WSH, не затрагивая при этом вопросы, связанные с составлением сценариев для HTML-страниц.
Строки кода и комментарии
В конце каждого оператора JScript нужно ставить точку с запятой. Например:
var theSum =0, і;
sum[0] = 0;
При этом один оператор может располагаться на нескольких строках, например:
var
theSum = 0,
і;
sum[0] = 0;
Комментарии в JScript могут быть двух видов. Для комментария, который занимает не более одной строки, можно использовать символы
//
. Например:
//Этот комментарий занимает всю строку
theSum=1; //А этот часть строки
Если же в текст сценария необходимо внести комментарий, расположенный на нескольких строках, то текст такого комментария нужно помещать внутри блока /*…*/
.
Например:
/* Это комментарий
на нескольких
строках */
Переменные
В сценариях JScript, как и в любом другом языке программирования, можно использовать переменные, обращаясь к ним по имени. При этом переменные могут быть как глобальными (доступными из любого места сценария), так и локальными (область действия ограничивается функцией, в которой они определены).
Хорошим тоном считается предварительное объявление используемых переменных с помощью ключевого слова var
, хотя это является обязательным условием только для локальных переменных, определенных в функциях. Пример объявления переменной имеет вид:
var MyVariable;
При объявлении тип переменной явным образом не указывается (как это делается, например, в языках С или Pascal). Определенный тип переменной присваивается только тогда, когда в нее записывается какое-либо значение.
Язык JScript является регистро-зависимым, т.е. имена
MyVariable
и myvariable
представляют разные переменные. Кроме этого, при выборе имен переменных следует придерживаться следующих правил:
• имя переменной должно начинаться с буквы или с символов "_
", "$
" и может состоять только из букв, цифр, а также символов "_
", "$
";
• имя переменной не должно совпадать с зарезервированными ключевыми словами языка JScript.
Список ключевых слов JScript приведен в табл. П1.1.
Таблица П1.1. Зарезервированные ключевые слова JScript
break default false new true
case delete finally null try
catch do for return typeof
class else function super var
const enum if switch void
continue export import this while
debugger extends in throw with
Значения переменным в JScript присваиваются с помощью оператора присваивания "=". Например:
var MyVariable;
MyVariable = "Привет!";
Здесь мы объявили переменную MyVariable
и записали в нее текстовую строку. Однако далее в любом месте сценария мы можем присвоить переменной MyVariable
числовое значение (при этом тип переменной изменится), например:
MyVariable = 10;
Кроме этого, переменной можно присвоить специальное значение
null
:
MyVariable = null;
В этом случае переменной MyVariable
не назначается никакого определенного типа (пустой тип). Такое присваивание применяется в тех случаях, когда необходимо объявить переменную и проинициализировать ее, не присваивая этой переменной никакого определенного типа и значения.
Типы данных
В JScript поддерживаются шесть типов данных, главными из которых являются числа, строки, объекты и логические данные. Оставшиеся два типа — это null (пустой тип) и undefined (неопределенный тип).
Числа
В сценариях JScript числа могут использоваться в различных форматах.
• Целые числа в диапазоне от -999 999 999 999 999 до 999 999 999 999 999. Кроме обычного десятичного, целые числа могут записываться в восьмеричном (префикс "0" и цифры 0–7) или в шестнадцатиричном (префикс "0х", цифры 0–9, символы "А", "В", "С", "D", "Е" и "F') виде. Например, восьмеричное число 0377 и шестнадцатеричное 0xFF равны десятичному 255.
• Вещественные числа, которые могут быть записаны как с плавающей точкой (например, -10.567), так и в научной нотации (например, 10567Е-3, что равно 10.567 ("число 10 567 умножить на 10 в степени -3")). Значения вещественных переменных и констант должны лежать в диапазоне от -Number.MAX_VALUE до Number.MAX_VALUE, где параметр Number.MAX_VALUE является специальным числовым значением, которое равно наибольшему вещественному числу, с которым может работать JScript (Number.MAX_VALUE приблизительно равно 1.79Е+308).
Кроме Number.MAX_VALUE в JScript имеются еще несколько специальных числовых значений.
• NaN (Not a Number) — так называемое "нечисло", которое не соответствует никакому числу (это значение генерируется в тех случаях, когда результат выполнения операции не может быть представлен в виде числа, например, при преобразовании строки "1s2" к числовому типу).
• Положительная бесконечность Number.POSITIVE_INFINITY (число, которое больше, чем Number.MAX_VALUE).
• Отрицательная бесконечность Number.NEGATIVE_INFINITY (число, которое меньше, чем -Number.MAX_VALUE).
• Самое близкое число к нулю Number.MIN_VALUE (примерно равно 2.22Е-308). Все числа, большие -Number.MIN_VALUE, но меньшие Number.MIN_VALUE, считаются равными нулю.
Текстовые строки
Текстовые строки — это последовательность символов, заключенных в одинарные или двойные кавычки, например:
"Привет!"
'Большой привет!'
'И тогда он крикнул "Берегись!"'
Строка может иметь нулевую длину (пустая строка):
MyVariable = "";
В JScript можно также использовать специальные комбинации символов, с помощью которых в строки включаются некоторые неотображаемые символы или символы, имеющие специальное значение. Каждая из этих комбинаций (escape-последовательностей) начинается с символа обратной косой черты "\
" (табл. П1.2).
Таблица П1.2. Специальные комбинации символов
Escape-последовательность |
Описание |
\b |
Backspace <←> |
\f |
Перевод формата |
\n |
Перевод строки |
\r |
Возврат каретки |
\t |
Горизонтальная табуляция
(<Ctrl>+<I>) |
\' |
Одинарная кавычка |
\" |
Двойная кавычка |
\\ |
Обратная косая черта |
Объекты
В JScript под объектом понимается совокупность свойств и методов. Метод — это внутренняя функция объекта, свойство — это одно значение какого-либо типа или несколько таких значений (в виде массива или объекта), хранящихся внутри объекта. Поддерживаются три вида объектов:
• встроенные (внутренние) объекты;
• объекты, создаваемые программистом в сценарии;
• внешние объекты (например, объекты WSH). Более подробно объекты будут рассмотрены ниже.
Логические данные
Логические данные предназначены для выполнения операций сравнения, а также для использования в условных операторах. При этом логические данные имеют только два значения: true
(истина) и false
(ложь). Отметим, что в JScript эти значения никак не соотносятся с числами 1 и 0.
Null (пустой тип) и undefined (неопределенный тип)
Если переменная была объявлена с помощью ключевого слова
var
, но ей еще ни разу не присваивалось значение, она имеет неопределенный тип (undefined)
:
var MyVariable;
После выполнения этой строки переменная MyVariable
имеет тип undefined
. Как уже отмечалось выше, если теперь присвоить переменной значение null
, то эта переменная будет типа
null
(пустой тип):
MyVariable = null;
Преобразование типов данных
Одной из особенностей языка JScript является то, что если в выражениях встречаются переменные разных типов, то автоматически происходит преобразование всех числовых данных в строковое представление. Например, следующие логические выражения будут равны true
:
"100" == 100
false == 0
(здесь "==" означает оператор сравнения). Для преобразования строк в числа нужно применять две специальные функции: parseInt
(преобразование к целому числу) и parseFloat
(преобразование к числу с плавающей запятой). Например, после выполнения следующих строк:
var s="";
s=(parseInt("3")-2)+"3";
значением переменной s
будет строка "13
".
Операторы
В JScript поддерживаются операторы различных типов, которые похожи на операторы языка С.
Унарные операторы
Унарными называются операторы, которые применяются к одному операнду (табл. П1.3).
Таблица П1.3. Унарные операторы
Оператор |
Описание |
- |
Изменение знака на противоположный |
! |
Дополнение. Используется для изменения значения
логической переменной на противоположное |
++ |
Увеличение значения числовой переменной на
единицу (инкремент). Может применяться как префикс переменной или как ее
суффикс |
-- |
Уменьшение значения числовой переменной на
единицу (декремент). Может применяться как префикс переменной или как ее
суффикс |
Бинарные операторы
Бинарными называются операторы, которые соединяют два операнда (табл. П1.4).
Таблица П1.4. Бинарные операторы
Оператор |
Описание |
Оператор |
Описание |
- |
Вычитание |
/ |
Деление |
+ |
Сложение |
% |
Вычисление остатка от деления |
* |
Умножение |
|
|
Операторы побитовых логических операций и сдвига
Эти операторы позволяют производить над числовыми переменными побитовые операции, описанные в табл. П1.5.
Таблица П1.5. Операторы побитовых логических операций и сдвига
Оператор |
Описание |
& |
Логическое И |
| |
Логическое ИЛИ |
^ |
Логическое ИСКЛЮЧАЮЩЕЕ ИЛИ |
~ |
Логическое НЕ |
>> |
Сдвиг вправо |
<< |
Сдвиг влево |
>>> |
Сдвиг вправо с заполнением освобождаемых
разрядов нулями |
!
Перед использованием операторов из табл. П1.5. значения
переменных преобразуются в 32-разрядные целые числа.
Операторы присваивания
В JScript, как и в языке С, для изменения содержимого переменных можно комбинировать оператор присваивания "=" с другими операторами (табл. П1.6).
Таблица П1.6. Комбинации оператора присваивания и других операторов
Оператор |
Описание |
= |
Простое присваивание |
+= |
Увеличение численного значения или конкатенация
(склеивание) строк |
-= |
Уменьшение численного значения |
*= |
Умножение |
/= |
Деление |
%= |
Вычисление остатка от деления |
>>= |
Сдвиг вправо |
>>>= |
Сдвиг вправо с заполнением освобождаемых
разрядов нулями |
<<= |
Сдвиг влево |
|= |
Логическое ИЛИ |
&= |
Логическое И |
^= |
Логическое ИСКЛЮЧАЮЩЕЕ ИЛИ |
Операторы отношения
Операторы отношения используются для сравнения значений нескольких переменных. Эти операторы, описанные в табл. П1.7, могут возвращать только логические значения true
или false
.
Таблица П1.7. Операторы отношения
Оператор |
Условие, при котором возвращается
true |
> |
Левый операнд больше правого |
>= |
Левый операнд больше или равен
правому |
< |
Левый операнд меньше правого |
<= |
Левый операнд меньше или равен
правому |
== |
Левый операнд равен правому |
!= |
Левый операнд не равен правому |
Также в условных операторах применяются логические операторы (табл. П1.8).
Таблица П1.8. Логические операторы
Оператор |
Описание |
|| |
Оператор отношения "ИЛИ". Возвращает
true , если один из операндов равен true . В
противном случае возвращает false |
&& |
Оператор отношения "И". Возвращает
true , если оба операнда равны true . В противном
случае возвращает false |
Условные операторы
В JScript поддерживается условный оператор if…else
. Общий вид этого оператора показан ниже:
if (условие) выражение_1
[else выражение_2]
При выполнении оператора if…else
оценивается логическое условие, заданное в круглых скобках после ключевого слова
if
. Если в результате оценки условия получилось значение true, то выполняется первое выражение. В противном случае выполняется второе выражение (если оно присутствует).
Оператор if…else
может быть вложенным. Заметим, что если в первом или втором выражении нужно расположить несколько операторов, то их следует выделить фигурными скобками:
if (х == 5) {
if (у == 6) z = 17;
} else z = 20;
В JScript также существует специальный тип условного оператора, который называется оператором "?:
". В общем виде он записывается так:
условие ? выражение_1 :
выражение_2
При вычислении оператора "?:
" вначале оценивается условие, расположенное в левой части. Если оно равно true
, то выполняется первое выражение, в противном случае — второе. Например:
hours += (theHour >=12) ? " РМ" : " AM";
Операторы циклов
Microsoft JScript поддерживает несколько типов циклов: цикл
for
, цикл for…in
, цикл while
, цикл
do…while
. Рассмотрим каждый из них подробнее.
Цикл for
В общем случае оператор цикла for имеет три раздела (инициализация, условие и итерация) и записывается следующим образом:
for ([инициализация;] [условие;] [итерация]){
тело цикла
}
В разделе инициализации обычно выполняется присваивание начальных значений переменным цикла. Здесь можно объявлять новые переменные с помощью ключевого слова var
.
Во втором разделе задается условие выхода из цикла. Это условие оценивается каждый раз при прохождении цикла. Если в результате такой оценки получается логическое значение true
, то начинают выполняться строки из тела цикла; в противном случае происходит выход из цикла. В том случае, когда условие было ложным с самого начала (при первой проверке), цикл не будет выполнен ни разу.
Раздел итерации применяется для изменения значений переменных цикла (например, увеличения или уменьшения значения счетчика цикла).
Пример использования цикла for
приведен в листинге П1.1.
►Листинг П1.1. Пример использования цикла for
var howFar = 11; // Верхний предел для счетчика цикла
var sum = new Array(howFar); //Массив из 11 элементов, индексы от 0 до 10
var theSum = 0;
sum[0] = 0;
//Цикл выполнится 10 раз
for(var icount = 1; icount < howFar; icount++) {
theSum += icount;
sum [icount] = theSum;
}
var newSum = 0;
//Цикл не выполнится ни разу
for(var icount = 1; icount > howFar; icount++) {
newSum += icount;
}
var sum = 0;
//Бесконечный цикл
for(var icount = 1; icount > 0; icount++) {
sum += icount;
}
Цикл for…in
Оператор цикла for…in
предназначен для просмотра всех свойств объекта. Для каждого свойства указанный цикл выполняет операторы, содержащиеся в теле цикла:
for (переменная in объект) {
тело цикла
}
Цикл for…in
можно использовать для вывода на экран всех свойств объекта в одном цикле:
function objectDisplay(obj) {
var displayLine;
for (var prop in obj) {
displayLine=obj.name+"."+prop+"="+obj[prop];
WScript.Echo(displayLine)
}
WScript.Echo("--------------");
}
Цикл while
Цикл while
похож на цикл for
. В нем также условие выхода из цикла проверяется перед выполнением итерации, однако в цикле while
, в отличие от for
, нет встроенного счетчика и выражения, его изменяющего.
Оператор while
записывается в следующем виде:
while (условие) {
тело цикла
}
Пример использования цикла while
приведен в листинге П1.2.
►Листинг П1.2. Пример использования цикла while
var theMoments = "";
var theCount = 42; // Начальное значение счетчика цикла
while (theCount >= 1) {
if (theCount > 1) {
theMoments = "До взрыва осталось " + theCount + " сек!";
} else {
theMoments = "Осталась секунда!";
}
theCount--; // Уменьшаем значение счетчика
}
theMoments = "ВЗРЫВ!";
Цикл do…while
Этот цикл является примером цикла с пост-условием и записывается в следующем виде:
do {
тело цикла
} while (условие);
В этом случае цикл выполняется до тех пор, пока проверяемое после ключевого слова while
условие не станет ложным (false
). Так как условие проверяется уже после прохождения тела цикла, то операторы внутри цикла do…while
выполнятся по крайней мере один раз.
Пример использования цикла do…while
приведен в листинге П1.3.
►Листинг П1.3. Пример использования цикла do…while
var howFar = 11; // Верхний предел для счетчика цикла
var sum = new Array(howFar); //Массив из 11 элементов, индексы от 0 до 10
var theSum = 0;
sum[0] = 0;
var icount - 1;
//Цикл выполнится 10 раз
do {
theSum += icount; sum [icount] = theSum;
icount++; }
while (icount < howFar);
Внутри цикла любого вида можно применять два специальных оператора: break
и continue
.
Оператор break
С помощью оператора break
можно прервать выполнение цикла в любом месте; управление при этом передастся на оператор, следующий сразу за циклом.
var i = 0;
while (i < 100) {
if (i == 50) break;
i++;
}
i++; // Значение i станет равным 51
Оператор continue
Оператор continue
прерывает текущую итерацию цикла и начинает новую. В различных видах циклов этот оператор производит следующие действия:
□ в циклах while
и do…while
проверяется условие цикла и если оно равно true
, то вновь выполняется тело цикла;
• в цикле for
изменяется значение счетчика в разделе итерации, проверяется условие цикла и если оно равно true
, то тело цикла выполняется вновь;
□ в цикле for…in
переменная цикла переходит к следующему полю объекта, и тело цикла выполняется вновь.
Пример использования оператора continue
:
var s = "", i=0;
while (i < 10) {
i++;
// Пропускаем число 5
if (i==5) {
continue;
}
}
s += i;
Прочие операторы
Рассмотрим еще несколько часто применяемых операторов (см. табл. П1.9).
Таблица П1.9. Прочие операторы
Оператор |
Описание |
. |
Точка. Применяется для доступа к свойству
объекта или для вызова его метода |
[] |
Квадратные скобки. Применяются для
индексирования массива |
() |
Скобки. Применяются либо для изменения порядка
вычисления выражений, либо для передачи параметров функциям |
, |
Запятая. Применяется для многократных
вычислений |
С помощью оператора ",
" можно, например, в разделе итерации цикла for
изменять значение сразу нескольких переменных:
var i, j;
j = 10;
for (i = 0; i<=10; i++, j--) {
…
}
Обработка исключительных ситуаций
Во время выполнения сценария могут возникать различные исключительные ситуации (например, деление на ноль или попытка открыть несуществующий файл), которые приводят к ошибкам времени выполнения — при этом на экран выводится диалоговое окно с сообщением об ошибке и выполнение сценария прекращается.
Существует возможность написать код сценария таким образом, чтобы исключительные ситуации не приводили к завершению работы, а обрабатывались бы внутри сценария. Для осуществления подобной обработки исключительных ситуаций в JScript необходимо использовать конструкцию try…catch
. Синтаксис следующий:
try
Защищенный блок
catch (except)
Блок обработки исключительных ситуаций
После ключевого слова try
здесь записываются те операторы, при выполнении которых потенциально может возникнуть ошибка. В качестве параметра except
надо использовать любое имя переменной (предварительно объявлять эту переменную не нужно). Если в защищенном блоке не возникло ошибки, то значение этой переменной будет равно нулю; в случае же возникновения исключительной ситуации управление сразу передается в блок
catch
, при этом переменная except
как экземпляр объекта Error
будет содержать два свойства: error
— числовой код возникшей ошибки и description
— краткое описание ошибки.
В качестве примера приведем часть сценария, в которой происходит обработка исключительных ситуаций при подключении сетевого диска:
try {
//Подключаем сетевой диск
WshNetwork.MapNetworkDrive(Drive, NetPath);
} catch (e) {
//Обрабатываем возможные ошибки
if (e != 0) {
//Выводим сообщение об ошибке
Mess="Ошибка при подключении диска " + Drive + " к " + NetPath+
"\nКод ошибки: "+е.number+"\nОписание: "+е.description;
WshShell.Popup(Mess, 0, "Подключение сетевого диска", vbCritical);
}
}
Порядок выполнения операторов
В табл. П1.10 операторы языка JScript расположены по старшинству, т.е. в составных операторах первыми будут выполняться те из них, которые стоят в этой таблице выше. Если операторы расположены в одной строке таблицы, то они выполняются слева направо.
Таблица П1.10. Порядок выполнения операторов
Оператор |
Описание |
. [] () |
Доступ к полю объекта, индексирование в массиве,
вызов функции |
++ -- - ~ ! |
Унарные операторы |
* / % |
Умножение, деление, вычисление остатка от
деления |
+ - + |
Сложение, вычитание, конкатенация строк |
<< >> >>> |
Битовые сдвиги |
< <= > >= |
Меньше, меньше или равно, больше, больше или
равно |
== != |
Равенство, неравенство |
& |
Логическое И |
^ |
Логическое ИСКЛЮЧАЮЩЕЕ ИЛИ |
| |
Логическое ИЛИ |
&& |
Оператор отношения И |
|| |
Оператор отношения ИЛИ |
?: |
Условный оператор |
= += -= *= /= %= >>= >>>=
<<= |= &= ^= |
Присваивание |
, |
Многократное вычисление |
Функции
Функции в JScript, как и в других алгоритмических языках, позволяют объединить несколько операций под одним именем. В случае необходимости функция может быть вызвана из любого места сценария.
В сценариях JScript поддерживаются два вида функций: встроенные функции и функции пользователя, которые вы пишете сами.
Встроенные функции
В табл. П1.11 описаны встроенные функции языка JScript, которые в сценарии можно вызывать в любом месте без предварительного описания.
Таблица П1.11. Встроенные функции
Функция |
Описание |
escape(charstring) |
Кодирование строки
charstring с применением URL-кодировки. При этом все
специальные неотображаемые символы преобразуются к виду %хх, где хх —
шестнадцатеричный код символа |
eval(codestring) |
Интерпретация и выполнение кода JScript,
содержащегося в строке codestring . Эта функция
позволяет динамически создавать текст сценария |
isFinite(number) |
Возвращает true , если параметр
number является корректным числом. В противном случае
возвращает false |
isNaN(numvalue) |
Возвращает true , если параметр
numvalue имеет специальное значение NaN (см.
описание числового типа). В противном случае возвращает
false . Эту функцию можно применять для оценки значений;
возвращаемых функциями преобразования типов parseInt и
parseFloat |
parseFloat(numstring) |
Преобразовывает строку
numstring в число с плавающей точкой |
parseInt(numstring,
[radix]) |
Преобразовывает строку
numstring в целое число. Целочисленный параметр
radix может принимать значения от 2 до 36, которые
указывают основание счисления для числа, содержащегося в numstring. Если
radix не указан, то строки с префиксом
'0х' задают шестнадцатеричные числа, а строки с префиксом
'0 ' — восьмеричные. Все остальные строки определяют
десятичные числа |
unescape(charstring) |
Выполняет действие, противоположное действию
функции escape , т.е. перекодирует строку
charstring из URL-кодировки в текстовую
строку |
Функции пользователя
Функции, определяемые пользователем, могут находиться в любом месте сценария и иметь произвольное число параметров (аргументов). Общий вид определения функции имеет вид:
function Имя_функции([параметр1] [, параметр2] [... , параметрN]) {
…
Тело функции
…
[return значение;]
}
Ключевое слово return
позволяет функции вернуть значение любого допустимого типа. Например, приведенная ниже функция
MyFunction
возвращает true
, если оба ее аргумента меньше 10:
function MyFunction(х,у) {
if ((х<10) && (у<10)) return true
else return false;
}
Встроенные объекты (классы)
Как уже отмечалось в самом начале раздела, JScript является объектно-ориентированным языком, поэтому математические вычисления, работа со строками, датой и временем, а также такими структурами, как массивы и коллекции, осуществляются с помощью соответствующих встроенных объектов. В табл. П1.12 описаны некоторые объекты, которые могут быть полезны при создании сценариев с помощью WSH.
Таблица П1.12. Некоторые встроенные объекты JScript
Объект |
Описание |
Array |
Создание и работа с массивами данных
произвольного типа |
Date |
Работа с данными, содержащими дату или
время |
Enumerator |
Работа с коллекциями данных произвольного
типа |
Math |
Выполнение математических вычислений |
String |
Работа с текстовыми строками |
Для того чтобы в сценарии использовать встроенный объект, необходимо создать переменную, с помощью которой можно будет получить доступ к свойствам и методам этого объекта. Для создания большинства переменных такого вида применяется оператор new
и специальная функция — конструктор нужного объекта. Название конструктора всегда совпадает с названием соответствующего встроенного объекта. Приведем пример создания объектов
Date
и Array
!
var d;
d = new Date();
var a;
a = new Array(10);
Отметим, что объекты string можно создавать, просто записывая в кавычках значение строки:
var s;
s = "Привет!";
Опишем объекты, приведенные в табл. П1.12, более подробно.
Объект Array
Новый объект встроенного класса Array
можно создать с помощью оператора new
следующими способами:
• new Array()
— создание массива нулевой длины;
• new Array(N)
— создание массива длины
N
;
• new Array(а0, a1, ..., aN)
— создание массива длины N+1
c элементами
а0
, a1
, ..., aN
.
Например:
var A1, А2, A3;
A1 = new Array();
A2 = new Array(3);
A3 = new Array(0, "Строка", 2.5);
Нумерация элементов в массивах всегда начинается с нуля. После того как массив создан и проинициализирован, обращаться к его элементам можно с помощью обычного оператора индексации [], например:
A3[1] = А3[0] + A3[2];
Длину массива, т.е. число содержащихся в нем элементов, можно узнать с помощью свойства length
объекта Array
. Для того чтобы динамически изменить длину массива (уменьшить или увеличить), достаточно просто записать соответствующее значение в свойство length:
var А;
А = new Array(1,2,3,4,5); // Длина массива А равна 5
A.length = 3; // Теперь длина массива А равна 3
Некоторые наиболее часто используемые методы встроенного объекта
Array
описаны в табл. П1.13.
Таблица П1.13. Методы объекта Array
Метод |
Описание |
a1.concat(а2) |
Возвращает новый массив, являющийся результатом
объединения (склеивания) двух массивов: a1 (его
элементы идут первыми) и а2 (его элементы идут после
элементов массива a1 ) |
join(separator) |
Возвращает строку, содержащую все идущие друг за
другом элементы массива, разделенные символом, указанным в параметре
separator |
reverse() |
Располагает элементы массива в обратном порядке
(первый меняется местами с последним, второй — с предпоследним и т.д.).
Новый массив при этом не создается |
slice(start, [end]) |
Возвращает часть массива, начиная с элемента с
индексом start , заканчивая элементом с индексом
end . Если в качестве end указано
отрицательное число, то оно задает смещение от конца массива. Если
параметр end не указан, то берутся все элементы
массива, начиная с элемента с индексом start |
sort([sortfunction]) |
Возвращает массив с отсортированными элементами.
Параметр sortfunction определяет имя функции,
используемой для сортировки; если этот параметр опущен, то сортировка
производится в порядке увеличения ASCII-кодов элементов
массива |
Пример использования методов объекта Array приведен в листинге П1.4.
►Листинг П1.4. Пример использования методов объекта Array
var A1, А2, A3;
A1 = new Array(2);
A2 = new Array(2,3,4,5);
A1[0] = 0;
A1[1] = 1;
A3 = A2.concat(A1); // A3=(2,3,4,5,0,1)
A3.sort(); // A3=(0,1,2,3,4,5)
Объект Date
Для создания нового объекта встроенного класса Date
используется один из трех конструкторов.
Конструктор первого вида позволяет создать объект, в котором хранится информация о текущих дате и времени:
var d;
d = new Date();
Здесь время задается по Гринвичу, т.е. с использованием времени (UCT — Universal Coordinated Time).
Конструктор второго вида имеет единственный параметр:
var d;
d = new Date(nMilliseconds);
Параметр nMilliseconds
задает дату в миллисекундах, считая от 1 января 1970 года.
Конструктор третьего вида предназначен для раздельного задания компонентов даты и имеет следующий вид:
var d;
d = new Date(year, month, date [, hours [, min [, sec [, ms]]]]);
Значения параметров последнего конструктора приведены в табл. П1.14.
Таблица П1.14. Параметры конструктора
Date
Параметр |
Описание |
year |
Год в четырехзначном формате, например 1998 (но
не 98) |
month |
Номер месяца от 0 (январь) до 11 (декабрь) |
date |
Календарная дата в диапазоне от 1 до 31 |
hours |
Час дня в диапазоне от 0 до 23 |
min |
Минуты в диапазоне от 0 до 59 |
sec |
Секунды в диапазоне от 0 до 59 |
ms |
Миллисекунды в диапазоне от 0 до
999 |
Наиболее часто используемые методы объекта Date
описаны в табл. П1.15.
Таблица П1.15. Некоторые методы объекта
Date
Метод |
Описание |
getDate() |
Возвращает календарную дату в диапазоне от 1 до
31 |
getDay() |
Возвращает номер дня недели (0 для воскресенья,
1 — для понедельника и т.д.) |
getFullYear() |
Возвращает четырехзначный номер года |
getHours() |
Возвращает число часов (отсчет идет с
полуночи) |
getMilliseconds() |
Возвращает число миллисекунд |
getMinutes() |
Возвращает число минут (отсчет идет с начала
часа) |
getMonth() |
Возвращает число месяцев (отсчет идет с
января) |
getSeconds() |
Возвращает число секунд (отсчет идет с начала
минуты) |
getTime() |
Определение времени для объекта Date. Возвращает
количество миллисекунд, прошедших с 1 января 1970 года |
getTimezoneOffset() |
Возвращает смещение локального времени
относительно времени по Гринвичу (в миллисекундах) |
parse(dateVal) |
Возвращает число миллисекунд, прошедших с
полуночи 1 января 1970 года по время, заданное параметром
dateVal . Для вызова метода parse
необязательно создавать объект класса Date , достаточно просто
сослаться на имя этого класса: n = Date.parse("10 May 2001
13:00:00"); Параметр dateVal может задаваться в
нескольких форматах (подробнее см документацию по языку
JScript) |
setDate(date) |
Устанавливает календарную дату. Параметр
date может принимать любые положительные или отрицательные
значения. Если значение date больше, чем количество
дней в месяце, который хранится в объекте Date , или
date является отрицательным числом, то календарная
дата устанавливается в число, равное разности параметра
date и числа дней в этом месяце |
setFullYear(year) |
Устанавливает номер года, заданный параметром
year |
setHours(hours) |
Устанавливает количество часов, заданное
параметром hours . Параметр hours
может принимать любые положительные или отрицательные значения (при
необходимости происходит соответствующее изменение даты, записанной в
объекте класса Date ) |
setMilliseconds(ms) |
Устанавливает количество миллисекунд, заданное
параметром ms . Параметр ms может
принимать любые положительные или отрицательные значения (при
необходимости происходит соответствующее изменение даты, записанной в
объекте класса Date ) |
setMinutes(min) |
Устанавливает количество минут, заданное
параметром min . Параметр min может
принимать любые положительные или отрицательные значения (при
необходимости происходит соответствующее изменение даты, записанной в
объекте класса Date ) |
setMonth(mon) |
Устанавливает номер месяца, прошедшего с начала
года. Параметр mon может принимать любые положительные
или отрицательные значения (при необходимости происходит соответствующее
изменение даты, записанной в объекте класса Date ) |
setSeconds(sec) |
Устанавливает количество секунд, заданное
параметром sec . Параметр sec может
принимать любые положительные или отрицательные значения (при
необходимости происходит соответствующее изменение даты, записанной в
объекте класса Date ) |
setTime(ms) |
Устанавливает дату, соответствующую количеству
миллисекунд (параметр ms ), прошедших с 1 января 1970
года |
toGMTString() |
Преобразует дату в строку и возвращает результат
в стандартном формате времени по Гринвичу (Greenwich Mean Time, GMT) |
ToLocaleString() |
Преобразует дату в строку и возвращает результат
в формате локального времени |
ToUTCString() |
Преобразует дату в строку и возвращает результат
в формате UTC |
UTC(year, month, date[, hours[, min[,
see [,ms]]]]) |
Преобразует дату, заданную параметрами метода, в
количество миллисекунд, прошедшее с полуночи 1 января 1970 года. При
использовании этого метода, как и метода parse , объект класса
Date создавать необязательно: n = Date.UTC(year, month,
date); |
Пример использования методов объекта Date
приведен в листинге П1.5.
►Листинг П1.5. Пример использования методов объекта Date
var d;
var s = "";
d = new Date();
s = "Дата: " + d.getDate() + "." + d.getMonth() + "." + d.getYear(); s += "\n";
s += "Время: " + d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds();
После выполнения этих строк в переменной s
будут записаны текущие дата и время.
Объект Enumerator
С помощью объекта Enumerator
можно получить доступ к любому элементу коллекции (в VBScript для этого служит цикл
For…Each
). Коллекцией в языке JScript называется множество элементов, которое отличается от массива тем, что к элементам коллекции нельзя получить прямой доступ с помощью индексов — можно только перемешать указатель текущего элемента на самый первый или следующий относительно текущего элемент.
Для создания нового объекта встроенного класса
Enumerator
используется конструктор следующего вида:
var е;
е = new Enumerator(collection);
Здесь параметр collection
указывает на коллекцию, для доступа к элементам которой и создается объект класса
Enumerator
. Сами коллекции обычно являются свойствами других объектов.
Методы объекта Enumerator
представлены в табл. П1.16 (свойств у этого объекта нет).
Таблица П1.16. Методы объекта
Enumerator
Метод |
Описание |
atEnd() |
Возвращает true , если указатель
текущего элемента находится на элементе, следующем за последним
экземпляром коллекции, либо коллекция пуста, либо текущий элемент не
определен. В противном случае возвращается false |
item() |
Возвращает значение текущего элемента коллекции.
Если коллекция пуста или текущий элемент не определен, возвращается
неопределенное значение undefined |
moveFirst() |
Перемещает указатель на первый элемент
коллекции. Если в коллекции нет элементов, текущий элемент принимает
неопределенное значение undefined |
moveNext() |
Перемещает указатель на следующий элемент
коллекции. Если перед применением этого метода указатель находился на
последнем элементе коллекции, либо коллекция пуста, текущий элемент
принимает неопределенное значение
undefined |
Пример, поясняющий схему применения объекта
Enumerator
, приведен в листинге П1.6.
►Листинг П1.6. Пример использования Enumerator
//Объявляем переменные
var FSO, Folder, Files, s;
//Создаем объект FileSystemObject
FSOWScript.CreateObject("Scripting.FileSystemObject");
//Создаем объект Folder для корневого каталога диска С:
Folder=FSO.GetFolder("С:\\")?
//Создаем коллекцию файлов каталога "Мои документы"
Files=new Enumerator(Folder.Files);
//Цикл по всем файлам
for (; !Files.atEnd(); Files.moveNext())
//Добавляем строку с именем файла
s+=Files.item().Name+"\n";
//Выводим полученные строки на экран
WScript.Echo(s);
Объект Math
Встроенный класс Math
применяется для математических вычислений и содержит основные математические константы и функции.
!
Объект Math
создается сервером сценариев
автоматически и не может быть создан при помощи оператора new
,
как другие встроенные объекты. Все методы и свойства этого объекта доступны из
сценария без какого-либо предварительного объявления.
Свойства объекта Math
(все они являются математическими константами) описаны в табл. П1.17.
Таблица П1.17. Свойства объекта
Math
Свойство |
Описание |
Е |
Константа е. Приблизительное ее значение равно
2,718 |
LN2 |
Натуральный логарифм числа 2 (приблизительно
0,693) |
LN10 |
Натуральный логарифм числа 10 (приблизительно
2,302) |
LOG2E |
Логарифм числа е по основанию 2 (примерно
1,442) |
LOG10E |
Логарифм числа е по основанию 10 (примерно
0,434) |
PI |
Число π, т.е. константа с приблизительным
значением, равным 3,142 |
SQRT1_2 |
Корень квадратный из ½ (примерно 0,707) |
SQRT2 |
Корень квадратный из 2 (примерно
1,414) |
Методы объекта Math
(они являются стандартными математическими функциями) приведены в табл. П1.18.
Таблица П1.18. Методы объекта Math
Метод |
Описание |
abs(х) |
Возвращает абсолютное значение числа
х |
acos(х) |
Возвращает арккосинус числа
х |
asin(х) |
Возвращает арксинус числа
х |
atan(x) |
Возвращает арктангенс числа
х |
atan2(у,x) |
Вычисляет угол в радианах от оси Oх
до точки (у, х ). Возвращаемое значение лежит в
диапазоне от -π до π |
ceil(x) |
Возвращает наименьшее целое значение, большее
или равное аргументу х |
cos(x) |
Возвращает косинус числа
х |
exp(x) |
Экспоненциальная функция, возвращает число е,
возведенное в степень х |
floor(x) |
Возвращает наибольшее целое значение, меньшее
или равное аргументу х |
log(x) |
Возвращает натуральный логарифм числа
х |
max(x1, x2) |
Возвращает наибольшее из двух значений
x1 и х2 |
min(x2, x2) |
Возвращает наименьшее из двух значений
x1 и х2 |
pow(y,x) |
Возводит число у в
степень х и возвращает полученный результат |
random() |
Возвращает случайное число в интервале от 0 до
1 |
round(x) |
Выполняет округление значения аргумента
х до ближайшего целого. Если десятичная часть числа
равна 0,5 или больше этого значения, то округление выполняется в бóльшую
сторону, иначе — в меньшую |
sin(x) |
Возвращает синус числа х |
sqrt(x) |
Вычисляет квадратный корень из числа х и
возвращает полученное значение |
tan(x) |
Возвращает тангенс числа
х |
Приведем пример использования свойств и методов встроенного объекта Math
:
var x,y,z;
х = 12;
у = Math.sqrt(х);
z = 2*Math.PI * Math.pow(у, x);
Объект String
Встроенный объект String
предназначен для выполнения различных операций над текстовыми строками. Обычно объекты класса
String
создаются просто с помощью записи в переменную текстового литерала:
var s1, s2;
s1 = "Это строка";
s2 = "Это тоже строка";
Также можно создавать такие объекты с помощью оператора
new
:
var s1, s2;
s1 = new String("Это строка");
s2 = new String("Это тоже строка");
Объект String
имеет свойство length
, в котором хранится длина строки.
Некоторые методы объекта String
, не связанные с тегами HTML, приведены в табл. П1.19.
Таблица П1.19. Некоторые методы объекта
String
Метод |
Описание |
charAt(index) |
Возвращает символ с индексом
index из строки. Нумерация символов в строке
начинается с нуля, поэтому допустимыми значениями параметра index
являются числа из диапазона от нуля до числа, на единицу
меньшего длины строки |
charCodeAt(index) |
Выбирает символ с индексом
index из строки и возвращает этот символ в кодировке
Unicode |
s1.concat(s2) |
Возвращает строку, являющуюся результатом
конкатенации (склеивания) строк s1 и s2 (то же
самое, что s1+s2 ) |
fromCharCode(c1,...,cN) |
Возвращает строку, состоящую из Unicode-символов
с кодами c1 ,..., cN |
s.indexOf(substr,
startindex) |
Возвращает индекс символа, с которого начинается
первое вхождение подстроки substr в строку
s . Если подстрока не найдена, возвращается -1. Параметр
startindex задает номер символа, с которого следует
начинать поиск. Если этот параметр не задан, то поиск производится с
начала строки. Поиск производится слева направо |
s.lastIndexOf(substr,
startindex) |
To же самое, что метод indexOf , но
поиск производится справа налево, т.е. возвращается номер последнего
символа, с которого начинается вхождение подстроки
substr в строку s |
s.match(rgExp) |
Возвращает в виде массива результат поиска в
строке s подстроки, задаваемой регулярным выражением
rgExp (поиск с использованием регулярных выражений
описан в документации по JScript) |
replace(rgExp,
replaceText) |
Возвращает копию строки, в которой произведены
необходимые замены текста. Шаблон для поиска задается регулярным
выражением rgExp , строка для замены — параметром
replaceText . Первоначальная строка методом
replace не изменяется |
search(rgExp) |
Возвращает номер первого символа в строке, с
которого начинается подстрока, удовлетворяющая регулярному выражению
rgExp |
slice(start, [end]) |
Возвращает часть строки, начиная с позиции
start и заканчивая символом, стоящим в позиции с
номером end (или последним символом в строке, если
параметр end опущен). Если в качестве
end указано отрицательное число, то этот параметр
задает смещение от конца массива |
s.split(str) |
Возвращает массив строк, полученных в результате
разбиения строки s на подстроки. Параметр
str задает строку или объект Regular Expression,
которые определяют символ, являющийся признаком начала разбиения |
substr(start [, length]) |
Возвращает подстроку, начинающуюся с позиции
start и имеющую длину length . Если
в качестве length указано отрицательное число или
ноль, то возвращается пустая строка |
substring(start, end) |
Возвращается подстрока, состоящая из символов,
начинающихся с позиции start и заканчивающихся
позицией end . В качестве start и
end могут быть указаны строки, которые в этом случае
автоматически преобразуются в числа |
toLowerCase() |
Возвращает строку, в которой все алфавитные
символы преобразованы к нижнему регистру |
toUpperCase() |
Возвращает строку, в которой все алфавитные
символы преобразованы к верхнему регистру |
Приведем пример использования методов объекта
String
:
var s1, s2, s3;
s1 = "Первая строка";
s2 = "Вторая строка";
s1 = s1.toUpperCase();
s2 = s2.substr(0, 6);
s1 = s1.slice(7);
s3 = s2 + " " + s1;
После выполнения этих строк значением переменной s3
будет строка "Вторая строка
".
✖
Приложение 1. Справочник по языку JScript