Comments 76
Может я что то не понимаю и у меня кривые руки, но я так и не смог нормально поставить линк на habrahabr.ru/blogs/javascript/50544/, по какой то неведомой причине, парсер переделывает его вот в это habrahabr.ru/blogs/javas&/#99;ript/50544/.
+9
а для тех кто не силён в яваскрипте поясните пожалуйста )
+8
А для тех кто не силён в яваскрипте, это как бы и не имеет особой силы =)
В описанном выше примере сообщение «Not IE!» появится только в случае… если броузер не IE.
В описанном выше примере сообщение «Not IE!» появится только в случае… если броузер не IE.
-43
ну я не настолько не компетентен и уж что такое alert знаю и что такое if else тоже )
-[1,] — механизм вот этой штуки поясните и все.
-[1,] — механизм вот этой штуки поясните и все.
+49
Я так дума, что просто IE считает, что после «1» в массиве должен быть еще один элемент, ибо стоит запятая. А его нет.
Другие браузеры не обращают внимания, а он — спотыкается.
Другие браузеры не обращают внимания, а он — спотыкается.
+7
*думаю :)
+3
Железная логика =)
0
Именно так. Так же как IE выдаст ошибку и на такую конструкцию:
{name1:val1,name2:val2,}
{name1:val1,name2:val2,}
+2
Нет, не так. Во первых IE не «спотыкается» на запятой, а считает её признаком ещё одного элемента, не более. Во вторых конструкция
{name1:val1,name2:val2,}
выдаст ошибку не из за запятой а из за того что в хэше, где используется сочетание ключ: значение в отличие от массивов, не будет найден очередной ключ.
{name1:val1,name2:val2,}
выдаст ошибку не из за запятой а из за того что в хэше, где используется сочетание ключ: значение в отличие от массивов, не будет найден очередной ключ.
+2
спотыкается и выдает null или undefined, а минус перед массиво преобразует это в число. в ноль.
В противном случае единственный элемент массива преобразуется в число и мы получаем -1, что в условии проходит.
В противном случае единственный элемент массива преобразуется в число и мы получаем -1, что в условии проходит.
+4
Internet Explorer прибавляет пустой элемент массива к общему числу элементов.Типо странинный баг-фича.
+4
Обычные браузеры при таком определении решат, что это число и получат "-1", а ИЕ — нет, поэтому он не сможет применить операцию "-". Как-то так, а по ссылке в посте все подробно расписано.
+7
Фишка в запятой после последнего элемента массива. По стандарту ECMAscript, одна запятая в конце игнорируется — это сделано для удобства записи в столбик, автогенерации и прочего. В Internet Explorer эта запятая добавляет пустой элемент. Итого во всех браузерах кроме internet explorer получится массив из одного числа. Минус перед массивом преобразует его в число. Массив из двух элементов, получившийся у Internet Explorer, в число не преобразуется, результатом будет значение «NaN», которое в условии «if» считается за «false». У всех остальных браузеров получится -1, которая считается за «true». Вот такие вот забавные документированные баги. Почему не убрали — непонятно :(.
+70
спасибо ) старая привычка ms понимать стандарты по своему видать.
+2
> Вот такие вот забавные документированные баги. Почему не убрали — непонятно :(.
Не убрали, чтобы самим быстро определять где же они, пользователи ИЕ :)
Не убрали, чтобы самим быстро определять где же они, пользователи ИЕ :)
+2
Ну почему же? Вполне стандартная политика Микрософта, заключается в следовании подходу «работает — не трожь». То есть вместо переписывания бажного куска они просто предлагают альтернативный вариант решения.
Для обратной совместимости это хорошо, а вот в конечном счете для разработчиков системы это плоховато. Впрочем они обычно в случае, когда багов и хитроумных способов их обойти становится слишком много, просто предлагают перейти на новую технологию и начать с чистого листа.
Для обратной совместимости это хорошо, а вот в конечном счете для разработчиков системы это плоховато. Впрочем они обычно в случае, когда багов и хитроумных способов их обойти становится слишком много, просто предлагают перейти на новую технологию и начать с чистого листа.
+1
Поясняю: «Массив из двух элементов, получившийся у Internet Explorer, в число не преобразуется» потому как при развертывании в IE мы получим не 1 а 1 с запятой, так как будет иметь место перечисление элементов — единицы и второго, несуществующего.
+1
додумываются же
+6
Никогда бы не подумал, спасибо. Сохранил.
+2
По ссылке на блог Aleko можно найти разъяснение механизма работы.
+2
Красиво и бесполезно.
-2
ну практически соглашусь… в 99% случаев требуется отличать какая именно версия ИЕ… а не то что это ИЕ вообще…
да и экономия в один байт… нет я понимаю — сам программирую уже довольно давно… сидел и на 286-х и на спектруме — но при современных скоростях чтения-записи, объёмах винтов и памяти и ширинах каналов это капля в море.
да и экономия в один байт… нет я понимаю — сам программирую уже довольно давно… сидел и на 286-х и на спектруме — но при современных скоростях чтения-записи, объёмах винтов и памяти и ширинах каналов это капля в море.
0
это спорт, товарищи
+20
интересно, а демосцена на яваскрипте есть?
+3
Думаю, написание standalone букмарлетов близко по духу, там ограничение в ~2 кило символов.
+2
Есть! И ещё какая! Например, p01 взял старую 4к интруху «полет над Марсом» и засунул в 256b JS! Там битвы похлеще прежних (:
0
bash.org.ru цитата №97364
В Опере есть возможность «Представиться как IE Explorer». Звучит как «Прикинуться дурачком»
В Опере есть возможность «Представиться как IE Explorer». Звучит как «Прикинуться дурачком»
+28
Улыбнуло :)
0
даже не просьба, скорее напоминание… если вам понравился коммент — плюсаните и в карму: это очень поможет тем, кто оказался не удел из-за одного неудачного топика.
-42
также из-за одного неудачного комментария =)
+8
первое правило бойцовского клуба — никогда не рассказывать про бойцовский клуб:)
тоже самое и с кармой)
тоже самое и с кармой)
+6
к счастью всёже можно отличить Оперу в ИЕ моде, от ИЕ, по заголовкам…
0
Занятно, обычно я ссылаюсь на Хабр, а тут наоборот — копипастят у меня :) Приятно.
+18
Пипец! Чем тупее бага, тем элегантней решение!
0
Ещё короче: if IE — nooo!
)
)
-15
жму вашу руку.
0
Вспомнилось
govnokod.ru/258
govnokod.ru/258
+1
с одной стороны гениально. с другой, если завтра js в webkit или mozilla вдруг начнёт вести себя аналогичным образом, придётся всё переделывать. так что гениальность сродни баяну
function getTomorrowDate() { sleep(86400); return strftime("%D"); }
function getTomorrowDate() { sleep(86400); return strftime("%D"); }
0
До этого, помню, самый короткий код что я видел:
if('\v' == 'v') { // IE
…
}
if('\v' == 'v') { // IE
…
}
0
Проверки основанные на ошибках, оригинально. К хорошему это не приводит. А на других, более серьезных языках автор данного варианта также программирует? Вот что интересно:-) Во многих компаниях за варнинги уже по голове не гладят, а тут такое. Да и почему только IE, многие вещи к примеру могут заработать во всех кроме FireFox или Opera, а бывают моменты, что для каждого браузера своя реализация нужна и куча подобных багов браузеров снесет башню новому программисту, которому придется курить код.
+2
А мне кажется IE что-то заподозрит ))
0
Помнится у меня при такой ошибке не создавались обьекты. А в опере выдается ворнинг.
0
Красиво, но в последующих версиях IE может перестать работать.
+1
Очень может быть, так как майкрософтовцы обещали сильно переписанный js движок в 9 IE, так что остается надеяться на то, что именно такие устоявшиеся безобидные помарки останутся.
0
Кстати, обсуждение этой «фичи» (про добавление пустого элемента) было уже на хабре, странно, что только сейчас способ определения ИЕ через него придумали
habrahabr.ru/blogs/javascript/67567/
habrahabr.ru/blogs/javascript/67567/
0
Большое спасибо всем за комментарии. К сожалению инвайт я получил только сейчас и не успел отписаться первым.
-2
Я так понимаю, что это работает на всех версиях ИЕ?
0
Я предпочитаю скрипт для IE грузить на уровне заголовка страницы.
Если IE — грузим ie.js
ИМХО — так проще…
Зачем другим браузерам вообще парсить и грузить код, который нужен експлореру?
хотя определение — зачетное… правда прослужит ли оно в новых експлорерах?
Если IE — грузим ie.js
ИМХО — так проще…
Зачем другим браузерам вообще парсить и грузить код, который нужен експлореру?
хотя определение — зачетное… правда прослужит ли оно в новых експлорерах?
+1
А если убрать знак восклицания и написать просто «Ne IE» то будет еще короче!!1
-1
Only those users with full accounts are able to leave comments. Log in, please.
Побит рекорд самого короткого кода по определению IE