Comments 76
Может я что то не понимаю и у меня кривые руки, но я так и не смог нормально поставить линк на habrahabr.ru/blogs/javascript/50544/, по какой то неведомой причине, парсер переделывает его вот в это habrahabr.ru/blogs/javas&/#99;ript/50544/.
а для тех кто не силён в яваскрипте поясните пожалуйста )
А для тех кто не силён в яваскрипте, это как бы и не имеет особой силы =)
В описанном выше примере сообщение «Not IE!» появится только в случае… если броузер не IE.
В описанном выше примере сообщение «Not IE!» появится только в случае… если броузер не IE.
ну я не настолько не компетентен и уж что такое alert знаю и что такое if else тоже )
-[1,] — механизм вот этой штуки поясните и все.
-[1,] — механизм вот этой штуки поясните и все.
Я так дума, что просто IE считает, что после «1» в массиве должен быть еще один элемент, ибо стоит запятая. А его нет.
Другие браузеры не обращают внимания, а он — спотыкается.
Другие браузеры не обращают внимания, а он — спотыкается.
*думаю :)
Железная логика =)
Именно так. Так же как IE выдаст ошибку и на такую конструкцию:
{name1:val1,name2:val2,}
{name1:val1,name2:val2,}
Нет, не так. Во первых IE не «спотыкается» на запятой, а считает её признаком ещё одного элемента, не более. Во вторых конструкция
{name1:val1,name2:val2,}
выдаст ошибку не из за запятой а из за того что в хэше, где используется сочетание ключ: значение в отличие от массивов, не будет найден очередной ключ.
{name1:val1,name2:val2,}
выдаст ошибку не из за запятой а из за того что в хэше, где используется сочетание ключ: значение в отличие от массивов, не будет найден очередной ключ.
спотыкается и выдает null или undefined, а минус перед массиво преобразует это в число. в ноль.
В противном случае единственный элемент массива преобразуется в число и мы получаем -1, что в условии проходит.
В противном случае единственный элемент массива преобразуется в число и мы получаем -1, что в условии проходит.
Internet Explorer прибавляет пустой элемент массива к общему числу элементов.Типо странинный баг-фича.
Обычные браузеры при таком определении решат, что это число и получат "-1", а ИЕ — нет, поэтому он не сможет применить операцию "-". Как-то так, а по ссылке в посте все подробно расписано.
Фишка в запятой после последнего элемента массива. По стандарту ECMAscript, одна запятая в конце игнорируется — это сделано для удобства записи в столбик, автогенерации и прочего. В Internet Explorer эта запятая добавляет пустой элемент. Итого во всех браузерах кроме internet explorer получится массив из одного числа. Минус перед массивом преобразует его в число. Массив из двух элементов, получившийся у Internet Explorer, в число не преобразуется, результатом будет значение «NaN», которое в условии «if» считается за «false». У всех остальных браузеров получится -1, которая считается за «true». Вот такие вот забавные документированные баги. Почему не убрали — непонятно :(.
спасибо ) старая привычка ms понимать стандарты по своему видать.
> Вот такие вот забавные документированные баги. Почему не убрали — непонятно :(.
Не убрали, чтобы самим быстро определять где же они, пользователи ИЕ :)
Не убрали, чтобы самим быстро определять где же они, пользователи ИЕ :)
Ну почему же? Вполне стандартная политика Микрософта, заключается в следовании подходу «работает — не трожь». То есть вместо переписывания бажного куска они просто предлагают альтернативный вариант решения.
Для обратной совместимости это хорошо, а вот в конечном счете для разработчиков системы это плоховато. Впрочем они обычно в случае, когда багов и хитроумных способов их обойти становится слишком много, просто предлагают перейти на новую технологию и начать с чистого листа.
Для обратной совместимости это хорошо, а вот в конечном счете для разработчиков системы это плоховато. Впрочем они обычно в случае, когда багов и хитроумных способов их обойти становится слишком много, просто предлагают перейти на новую технологию и начать с чистого листа.
Поясняю: «Массив из двух элементов, получившийся у Internet Explorer, в число не преобразуется» потому как при развертывании в IE мы получим не 1 а 1 с запятой, так как будет иметь место перечисление элементов — единицы и второго, несуществующего.
додумываются же
Никогда бы не подумал, спасибо. Сохранил.
По ссылке на блог Aleko можно найти разъяснение механизма работы.
Красиво и бесполезно.
это спорт, товарищи
bash.org.ru цитата №97364
В Опере есть возможность «Представиться как IE Explorer». Звучит как «Прикинуться дурачком»
В Опере есть возможность «Представиться как IE Explorer». Звучит как «Прикинуться дурачком»
Улыбнуло :)
даже не просьба, скорее напоминание… если вам понравился коммент — плюсаните и в карму: это очень поможет тем, кто оказался не удел из-за одного неудачного топика.
также из-за одного неудачного комментария =)
первое правило бойцовского клуба — никогда не рассказывать про бойцовский клуб:)
тоже самое и с кармой)
тоже самое и с кармой)
к счастью всёже можно отличить Оперу в ИЕ моде, от ИЕ, по заголовкам…
Занятно, обычно я ссылаюсь на Хабр, а тут наоборот — копипастят у меня :) Приятно.
Пипец! Чем тупее бага, тем элегантней решение!
Ещё короче: if IE — nooo!
)
)
жму вашу руку.
Вспомнилось
govnokod.ru/258
govnokod.ru/258
с одной стороны гениально. с другой, если завтра js в webkit или mozilla вдруг начнёт вести себя аналогичным образом, придётся всё переделывать. так что гениальность сродни баяну
function getTomorrowDate() { sleep(86400); return strftime("%D"); }
function getTomorrowDate() { sleep(86400); return strftime("%D"); }
До этого, помню, самый короткий код что я видел:
if('\v' == 'v') { // IE
…
}
if('\v' == 'v') { // IE
…
}
Проверки основанные на ошибках, оригинально. К хорошему это не приводит. А на других, более серьезных языках автор данного варианта также программирует? Вот что интересно:-) Во многих компаниях за варнинги уже по голове не гладят, а тут такое. Да и почему только IE, многие вещи к примеру могут заработать во всех кроме FireFox или Opera, а бывают моменты, что для каждого браузера своя реализация нужна и куча подобных багов браузеров снесет башню новому программисту, которому придется курить код.
А мне кажется IE что-то заподозрит ))
Помнится у меня при такой ошибке не создавались обьекты. А в опере выдается ворнинг.
Красиво, но в последующих версиях IE может перестать работать.
Очень может быть, так как майкрософтовцы обещали сильно переписанный js движок в 9 IE, так что остается надеяться на то, что именно такие устоявшиеся безобидные помарки останутся.
Кстати, обсуждение этой «фичи» (про добавление пустого элемента) было уже на хабре, странно, что только сейчас способ определения ИЕ через него придумали
habrahabr.ru/blogs/javascript/67567/
habrahabr.ru/blogs/javascript/67567/
Большое спасибо всем за комментарии. К сожалению инвайт я получил только сейчас и не успел отписаться первым.
Я так понимаю, что это работает на всех версиях ИЕ?
Я предпочитаю скрипт для IE грузить на уровне заголовка страницы.
Если IE — грузим ie.js
ИМХО — так проще…
Зачем другим браузерам вообще парсить и грузить код, который нужен експлореру?
хотя определение — зачетное… правда прослужит ли оно в новых експлорерах?
Если IE — грузим ie.js
ИМХО — так проще…
Зачем другим браузерам вообще парсить и грузить код, который нужен експлореру?
хотя определение — зачетное… правда прослужит ли оно в новых експлорерах?
А если убрать знак восклицания и написать просто «Ne IE» то будет еще короче!!1
Sign up to leave a comment.
Побит рекорд самого короткого кода по определению IE