从数组BUG 判断IE浏览器
对JavaScript中的数组长度判断时,如下面的代码:
alert(['a',].length);
在IE下,显示长度2,但在Firefox等浏览器下,显示1。
今天,看到这样一篇文章《全世界最短的JavaScript判定IE浏览器》,介绍了俄罗斯人使用的这种判断IE浏览器的最短代码(原文):
var isIE = !-[1,];
原因解释如下:
“[1,]实际上浏览器的操作是toString()转换成字符串的操作,-[1,]是将字符串强制转换为数字。而 IE 将会返回 NaN,但是遗憾的是 NaN 并不是一个数字,因为[1,]转换成字符串后的”1,”里面带有逗号。而其他标准浏览器会返回 -1,这是一个非 0 的数字。
你知道,NaN 转换成 Boolean 型将返回 false,所以-[1,]在 IE 下将返回 false。而任何非 0 的数字转换成 Boolean 型(例如-1),在 标准浏览器下都将返回 true。所以我们得到了一个判定结果,!-[1,]在 IE 下返回true,而在其他标准浏览器下返回 false。也就达到了区分判定 IE 浏览器的目的。”