Détecter Internet Explorer en quelques lignes de JavaScript

Une conversation entre développeurs qui dure depuis bientôt trois ans a abouti à ce code très pratique pour détecter n'importe quelle version d'Internet Explorer en JavaScript :

var ie = (function(){
    // for-loop saves characters over while
    for( var v = 3,
             // b just as good as a div with 2 fewer characters
             el = document.createElement('b'),
             // el.all instead of el.getElementsByTagName('i')
             // empty array as loop breaker (and exception-avoider) for non-IE and IE10+
             all = el.all || [];
         // i tag not well-formed since we know that IE5-IE9 won't mind
         el.innerHTML = '',
         all[0];
       );
    // instead of undefined, returns the documentMode for IE10+ compatibility
    // non-IE will still get undefined as before
    return v > 4 ? v : document.documentMode;
}() );

// Et en version minifiée
var ie=function(){for(var a=3,b=document.createElement("b"),c=b.all||[];b.innerHTML="",c[0];);return 4<a?a:document.documentMode}();

Si vous n'êtes pas dans Internet Explorer :

ie === undefined

Si vous êtes dans IE (>=5), vous pouvez connaitre la version exacte :

ie === 7; // IE7

La condition pour détecter IE revient donc à écrire :

if (ie) {}

Et pour connaitre les versions, on utilise les opérateurs JS classiques :

ie === 6 // IE6
ie > 7 // IE8, IE9 ...
ie < 9 // Toutes les versions inférieures à IE9    
via padolsey