Начиная с 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.
Директива @cc_on включает условную компиляцию. Альтернативный способом
включения условной компиляции является использование директив @if или
@set, не заключенных в комментарий.
Если условие1 истинно, то выполняются инструкции1. Если условие1 ложно,
присутствует необязательная директива @elif и условие2 истинно, то выполняются
инструкции2. В противном случае, если присутствует необязательная директива
@else, то выполняются инструкции3; если ее нет, то управление передается
следующему оператору. Данная директива может содержать несколько ветвей
@elif, но все они должны предшествовать ветви @else.
Пример: @if (@_win32)
alert("Работаем в Windows NT/95/98")
@else
alert("Неизвестная операционная система!");
Директива @set создает переменные условной компиляции. Имена таких
переменных имеют синтаксис переменных JavaScript, но должны начинаться
с символа "@". Значение, которое присваивается переменной,
может быть любым выражением JavaScript (возможно с использованием ранее
определенных переменных условной компиляции), которое возвращает числовое
или логическое значение.
Если переменная используется до ее определения, то она имеет значение
NaN. Поскольку это единственное значение, которое не равно самому себе,
то проверку определенности значения переменной следует делать так: