6.4. Другие возможности языка JavaScript

Дополнительные операторы JavaScript

Подведем промежуточный итог знакомства с JavaScript. На самом деле, мы с вами рассмотрели не так уж мало: достаточно сказать, что мы изучили практически все операторы этого языка. Конечно, все дело в том, что их не так много: операторы организации циклов (for, while и do...while), услов ные операторы (if и switch) и операторы манипулирования объектами, кото рые мы пока не рассматривали. Этих операторов всего два: with и for...in. Оба применяются в основном для сокращения объема вводимого текста. Например, вместо того чтобы написать

document.open (); document.write("Привет!") ; document.close();

можно использовать такую сокращенную запись:

with (document) {

open () ;

write("Привет!");

close ();

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

Другой оператор — for... in так же, как и оператор for, организует цикл. Но только вместо условия цикла при этом нужно указать объект, по всем свой ствам которого этот цикл и “пройдется”. Наверное, предыдущая фраза была не совсем понятна, поэтому поясним ее на примере.

Мы уже знаем о двух свойствах, позволяющих определить версию броузера —это navigator.appName и navigator.appVersion. Оба принадлежат объекту navigator. А между прочим, у этого объекта есть еще ряд интересных свойств. Чтобы их просмотреть, давайте создадим страницу, содержащую небольшой сценарий.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD>

<TITLE>Cвойствa Navigator</TITLE>

</HEAD>

<BODY>

<SCRIPT>

for (q in. navigator) document.write(q+"="+navigator[q]+"<BR>") ;

</SCRIPT>

</BODY>

</HTML>

Работает этот сценарий следующим образом. Переменной q поочередно присваивается имя каждого свойства объекта navigator. На экран при этом выводится (с помощью метода document.write) имя свойства (q), и, после знака равенства, значение свойства — (navigator[q]) . Таким образом, можно узнать о свойствах, о существовании которых мы до этого даже не подо зревали!

Вот, например, что нам покажет броузер Internet Explorer версии 5.0, если загрузить в него эту страницу:

appCodeName=Mozilla appMinorVersion=0 appName=Microsoft Internet Explorer appVersion=4.0 (compatible; MSIE 5.0; Windows 98; DigExt) cookieEnabled=true cpuClass=x86 mimeTypes=

onLine=true opsProfile= platform=Win32 plugins= systemLanguage=ru userAgent=Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt) userLanguage=ru userProfile=

Как видите, свойств довольно много. Некоторые из них, правда, дублируют друг друга. Например, свойство appMinorVersion — это число, стоящее после точки в appVersion (номер подверсии). А значение свойства userAgent состоит из комбинации значений appCodeName и appVersion. Кстати, различные броузеры покажут нам не только различные значения свойств, но и представят различный их набор. Вот, например, результат загрузки той же страницы в броузер Netscape 6:

appCodeName=Mozi1 la appName=Netscape appVersion=5.0 (Windows; en-US) language=en-US mimeTypes=[object MimeTyi " •Array] platform=Windows plugins=[object PluginArray] securityPolicy=

userAgent=Mozilla/5.0 (Windows; N; Win98; en-US; ml4) Netscape6/ 6. Obi

cookieEnabled=true

Таким образом, оператор цикла for...in можно использовать не только для сокращения времени “стучания по клавиатуре”, но и для исследования броузера!

Кстати, условный оператор if также имеет сокращенную форму записи, которую в некоторых случаях удобно применять (особенно если условие и выполняемые действия достаточно компактны). Для этого следует про сто написать условие, затем поставить знак вопроса, и после него указать действие, выполняемое в случае правильности условия. Затем, после двое точия, можно указать действие, выполняемое в противном случае.

Например, вместо:

if (a<=100) some function(a) ; else alert("Число превышает допустимое значение!");

можно написать так:

(а<=100) ? some function(a) : alert("Число превышает допустимое значение!");

Здесь some_function() — просто какая-то функция, определенная где-то на веб-странице.

Встроенные функции JavaScript

Теперь о функциях. Мы уже научились определять собственные функции. Кроме того, в JavaScript существуют так называемые встроенные (или предопределенные) функции. Некоторые из них мы уже знаем — это isNaNQ и parselnt(). Кстати, функция parselnt() имеет еще одну замечательную особенность: с ее помощью можно распознать число, введенное в любой системе счисления, начиная от двоичной и кончая 36-ричной. Для этого нужно просто в качестве второго аргумента указать основание системы счисления, например, вот так: parselnt("1110", 2);

В этом случае строка 1110 будет интерпретирована как двоичное число, и результатом функции будет число 14.

Кроме этих двух функций существуют еще функции parseRoat() и isFinite(). Функция parseFloat() не может принимать второй аргумент, зато может выделить из строки дробное число. Например, если написать

parseint("3.289 times"); то результатом выполнения функции будет число 3, а если написать

parseFloat("3.289 times");

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

parseFloat ("3.755е-2") ; даст в результате 0,03755.

Что касается функции isFinite(), то она принимает значение истина, если аргумент является числом, или ложь — в противном случае. Как вы можете заметить, она делает то же, что и функция isNaN(), только с противоположным результатом.

Существует еще полезная функция eval(). Она обычно определяется, как вычисление выражения без ссылки на конкретный объект. Сходу это понять довольно трудно.

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

Math.pow(j,i)

Такие конструкции, как правило, являются методами одного из встроенных объектов. Если вы пока плохо представляете себе, что это такое, не огорчайтесь. Для их употребления это совершенно не важно, поскольку их синтаксис очень похож на синтаксис функций. Например, выше было продемонстрировано возведение в степень. Можно осуществлять и другие действия с помощью объекта Math. Например, для округления числа i до ближайшего целого достаточно написать Math.round(i), а для вычисления его синуса — Math.sin(i).

Кроме того, можно пользоваться свойствами объекта Math. Если, к примеру, потребовалось ввести число тг, то не стоит вспоминать его с точностью до какого-то там знака — достаточно написать вместо него Math PI. Можно точно так же определить другие важные математические константы.

Помимо объекта Math, в JavaScript имеются и другие, например Array для работы с массивами, Date для работы с датами и прочие.