var _ie=(function(){
var v=3, div=document.createElement('div'), all=document.getElementByTagName('i');
while(
div.innerHTML = '<!--[if gt IE '+ (++v) +']><i></i><![endif]-->',
all[0]
);
return v > 4 ? v : false;
}());
javascriptie判断ie版本

解决方案 »

  1.   

    这句:
    _ie=function(){return v;}();
    是定了一个匿名函数,并立刻调用,由 _ie 保留返回值
    等同于
    function noname(){
    v = "test";
    return v;
    }
    _ie=noname();这句:
    div.innerHTML = '<!--[if gt IE '+ (++v) +']><i></i><![endif]-->',
            all[0]
    化简
    div.innerHTML = ''+ (++v) +'',all[0]首先要了解逗号运算符:
    它将先计算逗号左边的参数,再顺序计算右边的参数值。然后返回最右边参数的值。
    *然后,很重要的一点,逗号运算符的优先比 = 小所以,上述代码运行时的优先顺序是:
    (div.innerHTML = ''+ (++v) +''),(all[0])
    而 all[0] 作为 while 是否继续执行的条件这句:
    while(
            div.innerHTML = '<!--[if gt IE '+ (++v) +']><i></i><![endif]-->',
            all[0]
        );
    写成下面的样子容易懂些:
    while([条件])
        ;  //do nothing难点都解释了,还有个问题,当 all[0] 为非空时, while(true) 死循环,估计写错了,改一下
    while(
            div.innerHTML = '<!--[if gt IE '+ (++v) +']><i></i><![endif]-->',
            all[v]
        );
      

  2.   

    这个地方貌似是判断 ie版本号的
    这个all=document.getElementByTagName('i')  这个很费解,为毛要用这个来做while循环的标记。这个完全没有关系啊。。
      

  3.   

    首先说,
    all = document.getElementByTagName('i');代码错了,
    应该是:
    all = document.getElementsByTagName('i');
    while循环猜不出来,可能是一种特殊的处理吧,这是从那儿看的这么奇葩的代码,全部发出来让我们学习一下。