Причина позади ошибки анализа JavaScript в MSIE 8

Учитывая что-то как

var obj = {
     foo: function(){
         try{
             doSomething();
          }catch(ex){
               //@TODO - report error
          }
     }
 }

MSIE 8 подбросил бы "Недостающую точку с запятой на строке #", который был, где @TODO был.

После того, как я sed'd десятки @TODO, чтобы быть! TODO, MSIE смог правильно проанализировать сценарий, и жизнь продолжалась. Я пропускаю что-то здесь, MSIE использует своего рода нестандартный механизм как//@PRAGMA?

Поиск с помощью Google для @TODO или//не поднял ничего полезного.

9
задан genesis 5 September 2011 в 04:14
поделиться

3 ответа

Это связано с условной компиляцией, изобретением только для 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 .

9
ответ дан 3 November 2019 в 00:58
поделиться

Синтаксис comment + @ используется для условной компиляции в Internet Explorer. См. http://www.javascriptkit.com/javatutors/conditionalcompile.shtml

2
ответ дан 3 November 2019 в 00:58
поделиться

Я вспомнил, что видел подобное сообщение на нашем форуме, кажется, оно интерпретируется JScript:

http://www.sencha.com/forum/showthread.php?92186-FIXED-579-Comment-line- приводит-к-IE7-error & highlight = comment

0
ответ дан 3 November 2019 в 00:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: