最近偶然看到一段判断是否为IE浏览器的代码:
1 if(!+[1,]) { 2 console.info("IE 浏览器"); 3 } else { 4 console.info("非 IE浏览器"); 5 }
短短的几个字节就判断出当前浏览器是否为IE浏览器,有意思。
最后看了这里才知道原来是使用了IE浏览器自身编译js代码上的区别才明白;
原来在IE浏览器中如果 +[1,] IE浏览器解析的顺序是[1,].toString()-->'1,' 而 '1,'-->Number('1,') -->NaN;在非IE浏览器中+[1,] js解析的时候会把'1,'后面的“,”号给去掉了
所以得到的结果是1;所以我们就明白了在IE浏览器中!+[1,] 得到NaN, !NaN 为true;就是利用了IE浏览器中处理数组的toString()方法来完成判断;不得不佩服。
但是接下来的研究中发现其实这个bug在IE9的时候已经被解决了,请看这里所以IE8及以下版本用此判断没问题的;但是我们也有别的办法判断即:
1 if(window.VBArray) { 2 console.info("IE浏览器"); 3 } else { 4 console.info("非IE浏览器"); 5 }