Это связано с условной компиляцией, изобретением, предназначенным только для IE, для варьирования компиляции JScript (в IE это название ECMAScript) на основе информации о браузере и среде. Синтаксис включает символ @
, за которым следует строка для создания переменной, директивы или оператора. В этом случае наличие @TODO
непосредственно после начала комментария приводит к тому, что текст комментария интерпретируется как оператор условной компиляции, причем @TODO
является переменной условной компиляции (со значением NaN
: см. http://msdn.microsoft.com/en-us/library/k0h7dyd7%28v=VS.80%29.aspx).
Операторы условной компиляции обычно содержатся в комментариях JavaScript: они предназначены для того, чтобы другие браузеры не пытались интерпретировать код, но на самом деле не нужны для запуска условной компиляции. Документация MSDN находится здесь:
http://msdn.microsoft.com/en-us/library/ahx1z4fs%28v=VS.80%29.aspx
Эта функция доступна только для кода, который появляется после включения условной компиляции, что достигается с помощью
/*@cc_on @*/
Поэтому, если вы сможете найти эту строку и удалить ее, тогда ваш //@TODO - report error
будет в порядке. Тем не менее, часть вашего кода может полагаться на условную компиляцию, так что это может быть не вариант. Обходной путь - вставить пробел между началом комментария (//
или /*
) и символом @
:
// @TODO - report error
Документация Microsoft не достаточно ясна, чтобы понять, почему это работает, поскольку переменные условной компиляции также работают вне комментариев:
// The following works in IE:
/*@cc_on @*/
var j = @_jscript_build;
alert(j);
Поэтому самым безопасным вариантом было бы вообще не использовать @TODO
.