大魔 I'm Png

" Scientists ask why, engineers ask why not? "

从数组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 浏览器的目的。

类别: Web开发

Tags:

damon pang

大魔

Damo

i#impng.com

专注Web开发,爱电影,爱One Piece.