Начиная с Internet Explorer 4.0, язык JScript поддерживает условную компиляцию сценариев. Она была введена в JScript для того, чтобы одновременно обеспечить и использование новых возможностей языка, и совместимость со старыми версиями обозревателей. Типичными примерами использования условной компиляции являются добавление в сценарий отладочного кода и трассировка исполнения сценария.
Условная компиляция включается директивой
@cc_on или директивами
@if или
@set.
Директивы условной компиляции всегда следует помещать внутрь комментариев с тем, чтобы обозреватели, которые не поддерживают условную компиляцию (например, Netscape Navigator), их игнорировали. Приведем пример:
/*@cc_on @*/
/*@if (@_jscript_version >= 4)
alert("JScript версии 4 или выше");
@else @*/
alert("Ваш JScript устарел.");
/*@end @*/
В этом примере использованы комментарии специального вида, которые используются только после директивы
@cc_on. Обозреватели, которые не поддерживают условную компиляцию, увидят здесь только строку
alert("Ваш JScript устарел.")
и исполнят ее.
В директивах условной компиляции могут использоваться предопределенные переменные, перечисленные в приведенной ниже таблице. Если значение переменной отлично от
true, то она не определена и ведет себя как
NaN.
Переменные условной компиляции
Переменная |
Описание |
@_win32 |
true при выполнении в системе Win32. |
@_win16 |
true при выполнении в системе Win16. |
@_mac |
true при выполнении в системе Apple Macintosh. |
@_alpha |
true при выполнении на процессоре DEC Alpha. |
@_x86 |
true при выполнении на процессоре Intel. |
@_mc680x0 |
true при выполнении на процессоре Motorola 680x0. |
@_PowerPC |
true при выполнении на процессоре Motorola PowerPC. |
@_jscript |
Всегда true. |
@_jscript_build |
Номер сборки JScript. |
@_jscript_version |
Номер версии JScript в формате m.n. |
Синтаксис: @cc_on
Директива
@cc_on включает условную компиляцию. Пример ее использования приведен выше.
Альтернативный способом включения условной компиляции является использование директив
@if или
@set, не заключенных в комментарий.
Синтаксис:
@if (условие1)
текст1
@elif (условие2)
текст2
@else
текст3
@end
Аргументы: условие1, условие2 — логические выражения
текст1, текст2, текст3 — любой текст JScript
Директива
@if выполняет заданный фрагмент кода в зависимости от значения выражения. Если
условие1 истинно, то выполняется
текст1. Если
условие1 ложно, присутствует необязательная директива
@elif и
условие2 истинно, то выполняется
текст2. В противном случае, если присутствует необязательная директива
@else, то выполняется
текст3; если ее нет, то управление передается следующему оператору. Данная директива может содержать несколько ветвей
@elif, но все они должны предшествовать ветви
@else. Пример ее использования:
@if (@_win32)
alert("Работаем в Windows NT/95/98")
@else
alert("Неизвестная операционная система!");