`
老_油条
  • 浏览: 1238 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

全世界最短IE判定if(!+[1,])的解释

阅读更多
全世界最短IE判定if(!+[1,])的解释
      这个标题是抄来的,内容也是抄来的,copy by Jimmy.Yang,来自博客园菩提树下的杨过.Net。因为觉得很有用,记录一下。
      这个问题是在一个代码里面碰到的,if(!+[1,]),同事在网上找的代码,我觉得好奇,就小研究下。
      以前最短的IE判定借助于IE不支持垂直制表符的特性搞出来的。
var ie = !+"\v1";


仅仅需要7bytes!但这纪录今年1月8日被一个俄国人打破了,现在只要6 bytes!它利用了IE与标准浏览器在处理数组的toString方法的差异做成的。对于标准游览器,如果数组里面最后一个字符为逗号,JS引擎会自动剔除它。
   var ie = !-[1,];
   alert(ie);


如果从非IE的角度判定,可以省一个比特,因为我们做兼容时,绝大多数情况都是IE与非IE地开工。
if(-[1,]){
     alert("这不是IE浏览器!");
}else{
     alert("这是IE浏览器!");
}


     那么好,接下来就是原理
alert([1,2]);//相当于alert([1,2].toString()); --这在IE与非IE上都相同,都会弹出"1,2"
alert([1,]);//相当于alert([1,].toString());--在非IE的标准浏览器上,js引擎会自动删除最后的",",所以在IE上会弹出"1,",而在非IE上会弹出"1"
alert(+[1,]);//根据上面的解释,这一句在IE上相当于alert(+"1,"),而在非IE上相当于alert(+"1"),正号的作用在于试图将字符串转换为数字,"1,"当然不是数字,而"1"可以转换为数字1,所以最终的结果:IE上会转换失败弹出"NaN",而非IE浏览器上会弹出数字"1"

//上面的+号转换字符串为数字的测试
var s = +"5";
alert(s+1);

//ok,到这里为止,我们知道 +[1,] 最终在IE为上NaN,在非IE浏览器上则为数字1

//下面再来看看很有个性的NaN
alert(NaN==true);//弹出 false
alert(NaN==false);//弹出 false
alert(NaN==NaN);//弹出 false

//即NaN不管与谁比较都是false
alert(!NaN);//相当于alert(!(NaN==true)),根据上面的解释当然是弹出true


//所以,alert(!+[1,]) 最终在IE上会弹出"true",下面再来看看firefox等非IE浏览器上的表现
alert(new Boolean(0));//false
alert(new Boolean(1));//true
alert(new Boolean(-1));//true
//即:数字0会转换为false,其它任何数字都会转换为true,所以最终在非IE浏览器上最终等效于:
alert(!1);
//即
alert(!true)//最终会得到false

//综上所述:下面的这个判断就能判定浏览器是不是IE
if (!+[1,]){
    alert("我是货真价实的IE浏览器!")
}
else{
    alert("我不是IE!")
}


     这样解释,应该已经明白了,以此记录,以后能有所提高,真心的js好神奇。
     分享让更多人受益。
分享到:
评论

相关推荐

    最短的IE判断var ie=!-[1,]分析

    以前最短的IE判定借助于IE不支持垂直制表符的特性搞出来的。  代码如下:  var ie = !+”\v1″;   仅仅需要7bytes!参见这篇文章,《32 bytes, ehr … 9, ehr … 7!!! to know if your browser is IE》,讲述外国...

    js 全世界最短的IE浏览器判断代码

    to know if your browser is IE》,讲述外国人是如何把IE的判定从32 bytes一步步缩简成7 bytes!的故事 但这纪录今年1月8日被一个俄国人打破了,现在只要6 bytes!它利用了IE与标准浏览器在处理数组的toString方法的...

    解读JavaScript代码 var ie = !-[1,] 最短的IE判定代码

     这句代码在IE9之前曾被称为世界上最短的IE判定代码。代码虽短但确包含了不少javascript基础知识在里面。在这个例子中代码执行时会先调用数组的toString()方法 ,执行[1,].toString()在IE6,7,8中将会得到“1,”。...

    最短的IE判断代码

    to know if your browser is IE》,讲述外国人是如何把IE的判定从32 bytes一步步缩简成7 bytes!的故事 但这纪录今年1月8日被一个俄国人打破了,现在只要6 bytes!它利用了IE与标准浏览器在处理数组的toString方法的...

    相似三角形判定+性质+经典例题分析.docx

    1. **判定定理1**:两角对应相等的三角形相似。这意味着如果ΔABC和ΔXYZ中,∠A=∠X,∠B=∠Y,则ΔABC∽ΔXYZ。 **四、平行线分线段成比例定理** 1. **定理**:三条平行线截两条直线,所得的对应线段成比例。 2....

    相似三角形的判定+性质+经典例题分析.doc

    相似三角形的判定+性质+经典例题分析.doc

    相似三角形的判定+性质+经典例题分析.docx

    1. **判定定理 1**:两角对应相等的三角形相似。 - **拓展**:一组锐角对应相等的直角三角形相似;顶角或底角对应相等的等腰三角形相似。 **经典例题分析** 1. **例题 1**:通过平行线DE与三角形ABC的边AB、AC的...

    最短路径 之 SPFA算法

    1. 首先,初始化所有结点的最短路径长度为无穷大,然后将源点的最短路径长度初始化为 0。 2. 维护一个队列,开始时将源点置于队首,然后反复进行这样的操作,直到队列为空: * 从队首取出一个结点 u,扫描所有由 u ...

    人工智能 基于Python语言实现刑事犯罪罪名判定算法源码+文档说明+数据(SVM、逻辑回归、多项式朴素贝叶斯比较分析).zip

    人工智能毕设 基于Python语言实现刑事犯罪罪名判定算法源码+项目文档说明+数据(SVM、逻辑回归、多项式朴素贝叶斯比较分析).zip 本课题的研究目标是使用Python语言实现刑事犯罪罪名判定算法,以罪名为标签,以案件...

    圆位置判定+质数判定+整根式化简

    圆位置判定+质数判定+整根式化简三个功能,VB做得。。本人是新手,所以技术可能不太过关,偶尔会有出错的时候,希望高手帮忙优化下,谢谢!

    JAVA编程题全集(100题及答案)2.doc

    +2!+3!+……+10!= " + sum); } } ``` - **程序逻辑:** - 外层循环遍历1到10。 - 内层循环计算每个数字的阶乘。 - 累加器`sum`用于累计每个阶乘的结果。 #### 题目三:定义圆和圆柱体类 **知识点:** 1. **...

    部编第3章+全等三角形性质与判定+第1关+提高.docx

    例如,在题目中提到的点A(0,1)和点C(4,3)所在的三角形ABC,若要使得△ABD与△ABC全等,我们需要找到点D,使得AD与AC相等,BD与BC相等,或者根据其他条件判断全等。 全等三角形的性质包括: 1. 全等三角形的...

    判定树判定表

    **判定树和判定表是两种常用的逻辑决策工具,它们在软件工程、数据分析和管理决策等领域广泛应用。** **一、判定树(Decision Tree)** 判定树是一种图形化表示决策过程的方法,它通过树枝状结构来展示各种可能的...

    ACM常用模板总结ACM常用模板总结

    质数随机判定(miller_rabin) 质因数分解 最大公约数欧拉函数 数值计算\ 定积分计算(Romberg) 多项式求根(牛顿法) 周期性方程(追赶法) 图论_NP搜索\ 最大团(n小于64) 最大团 图论_连通性\ 无向图关键边(dfs...

    浙大算法包,几何 结构\数论\数值计算\图论_NP搜索\图论_连通性\图论_匹配\组合\

    质数随机判定(miller_rabin) 质因数分解 最大公约数欧拉函数 数值计算\ 定积分计算(Romberg) 多项式求根(牛顿法) 周期性方程(追赶法) 图论_NP搜索\ 最大团(n小于64) 最大团 图论_连通性\ 无向图关键边(dfs...

    ACM算法模板集锦(几何,结构,其他,数论,数值计算,图论)

    质数随机判定(miller_rabin) 质因数分解 最大公约数欧拉函数 数值计算\ 定积分计算(Romberg) 多项式求根(牛顿法) 周期性方程(追赶法) 图论_NP搜索\ 最大团(n小于64) 最大团 图论_连通性\ 无向图关键边(dfs...

    第三章练习题.docx

    根据提供的文件信息,我们可以将这些练习题按照不同的知识点进行分类,并对每个题目涉及的核心概念进行详细解释。 ### 编程基础 #### 1. 计算小于 1000 的所有整数中能够同时被 5 和 7 整除的最大整数 **知识点:*...

    利用固相能量守恒定律判定煤炭最短发火期

    利用固相能量守恒定律判定煤炭最短发火期技术,建立简便实效的数学模型,并与使用TGA/SDTA851 e同步热分析仪所得的数据进行拟合,对煤的实验最短发火期进行测算,大幅提高最短发火期预测的效率和精度,对我国研究煤自燃...

    华科计算机保研复试机试题目

    +4!+...p!(p 是小于等于 n 的最大偶数) + 知识点:递归函数、阶乘运算 * 题目 2:输入一个 5×5 的矩阵,判断是否对称 + 知识点:矩阵数据结构、矩阵运算 * 题目 3:建立一个升序链表并遍历 + 知识点:链表数据...

Global site tag (gtag.js) - Google Analytics