Самое короткое определение IE

Code
<script type='text/javascript'>
var ie = !-[1,];
alert(ie);
</script>
var ie = !-[1,];
alert(ie);
</script>
Этот вариант не зависит от режима отображения страниц в браузере. Так же он протестирован во всех версиях IE и в других распространенных браузерах. Основывается на баге, признанном Microsoft достаточно давно, но так и не исправленном.
Ie detection in 5 bytes!вернет 1 во всех нормальных браузерах (По стандарту ECMAscript, одна запятая в конце массива игнорируется - это сделано для удобства записи в столбик, автогенерации и прочего), ie же вернет 2. Это же произойдет и при распечатывании массива: ie вернет '1,' так как он видит 2 элемента и следовательно разделяет их запятой а все остальные браузеры вернут '1'. Это легко проверить вот этим кодом поочередно выполнив его сначала, к примеру, в FF а потом в IE:
Вот несколько других кратчайших методов определения IE.
Code
<script type='text/javascript'>
// Вариант от Дина Эдвардса:
var ie = /*@cc_on!@*/false;
// Использования закомментированной строки:
var ie//@cc_on=1;
// Вариация (более короткая переменная):
var ie = '\v'=='v';
// Вариант от Гарета Хэйеса (бывший рекордсмен):
var ie = !+"\v1";
</script>
// Вариант от Дина Эдвардса:
var ie = /*@cc_on!@*/false;
// Использования закомментированной строки:
var ie//@cc_on=1;
// Вариация (более короткая переменная):
var ie = '\v'=='v';
// Вариант от Гарета Хэйеса (бывший рекордсмен):
var ie = !+"\v1";
</script>
UPD
Возможно так же обратное использование функции - true в нормальных браузерах и false в IE. В таком случае переменная займет 5 символов:Code
<script type='text/javascript'>
notIe = -[1,];
/* в таком случае становится
доступным написание вида */
if(-[1,]){
// код для нормальных браузеров
}else{
// код для IE
}
</script>
notIe = -[1,];
/* в таком случае становится
доступным написание вида */
if(-[1,]){
// код для нормальных браузеров
}else{
// код для IE
}
</script>
Как это работает?
Мой способ определения IE основан на документированной ошибке. Ошибка заключается в том что Internet Explorer прибавляет пустой элемент массива к общему числу элементов. То естьCode
[1,].length
Code
<script type='text/javascript'>
alert([,]==',');
// это кстати 8-символьная проверка на IE =)
</script>
alert([,]==',');
// это кстати 8-символьная проверка на IE =)
</script>
Далее мы переводим полученную строку в число. Для этого я использовал знак вычитания. Переводя '1,' в число эксплорер получит NaN, то есть Not a Number - не число, так как в выражении присутствует запятая. Обычные же браузеры получат -1, число не равное нулю.
Так, при переведении NaN в булевное значение мы получаем false а при переведении любого ненулевого числового значения (в данном случае -1) в булевное значение мы получаем true. На этом основывается принцип определения браузера.
Восклицательный знак в начале выражения переводит результат в булевное значение и зеркально его изменяет. В итоге мы получаем true в IE и false во всех остальных браузерах.
Видеодесерт
Teh Third & the Seventh by Alex Roman. Неповторимо. Пожалуйста не смотрите здесь, откройте vimeo и посмотрите в HD на весь экран.
42, 24, 15933
http://leeiio.me/ie_detection_in_5_bytes/
или ещё вот
http://snandy.javaeye.com/blog/603712
[sayto]var IE = ''.replace('','$$')>'$'[/sayto],
http://twitter.com/WebReflection/status/7515524075
Мой способ легко преобразовать в булеву добавлением восклицательного знака, а вот ваш - никак, так как у вас уже выражение а не один элемент - придется либо окружать скобками, либо делать это позднее.
Вот ещё пример пятисимвольника возвращающего булевные значения:
[,]<1
Шестисимвольный вариант возвращающий true в IE и false в других браузерах.
шестисимвольный вариант, возвращающий 1 в IE и 0 в других браузерах.
Где-же "Гиннес"? :D
А так, занятно...
SinuS