有人曾经利用了数组的一个IE的特性创造出了所谓全世界最短的IE判断,即数组最后多加了一个逗号,关于这个特性请看
snandy童鞋的文章《
定义对象或数组直接量时不同引擎对多余逗号的处理》,这个特性其实以前也研究过,但没有将它和这个IE判断联系起来,现在简单分析一下。
var isIE = !-[1,];
alert(isIE);
其实isIE的赋值可以写成:
var isIE = !(-(Number([1,].toString())));
在IE下[1,]包含有两个元素,一个是1,一个是undefined,而在其他浏览器里这个数组只有一个1,因此:
IE下[1,].toString()等于'1,',在其他浏览器里则是'1',而原式!-[1,]中负号'-'则是用来调用Number()方法,Number(1,)等于NaN,Number(1)等于1,由此可得在IE下isIE为true,而在其他浏览器中为false。因此可以用isIE = !-[1,]来判断浏览器是否为IE6,7,8(IE9已经修改数组这个特性了)。