Учитывая что-то как
var obj = {
foo: function(){
try{
doSomething();
}catch(ex){
//@TODO - report error
}
}
}
MSIE 8 подбросил бы "Недостающую точку с запятой на строке #", который был, где @TODO был.
После того, как я sed'd десятки @TODO, чтобы быть! TODO, MSIE смог правильно проанализировать сценарий, и жизнь продолжалась. Я пропускаю что-то здесь, MSIE использует своего рода нестандартный механизм как//@PRAGMA?
Поиск с помощью Google для @TODO или//не поднял ничего полезного.
Это связано с условной компиляцией, изобретением только для 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
будет в порядке.Однако часть вашего кода может полагаться на условную компиляцию, поэтому это может быть не вариант. Обходной путь - вставить пробел между началом комментария ( //
или / *
) и символом @
:
// @TODO - report error
Документация Microsoft недостаточно ясно, чтобы понять, почему это работает, поскольку переменные условной компиляции также работают вне комментариев:
// The following works in IE:
/*@cc_on @*/
var j = @_jscript_build;
alert(j);
Поэтому самым безопасным вариантом было бы вообще отказаться от использования @TODO
.
Синтаксис comment + @ используется для условной компиляции в Internet Explorer. См. http://www.javascriptkit.com/javatutors/conditionalcompile.shtml
Я вспомнил, что видел подобное сообщение на нашем форуме, кажется, оно интерпретируется JScript: