`
helin
  • 浏览: 153226 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

全世界最短的IE判定

阅读更多

              

全世界最短的IE判定

以前最短的IE判定借助于IE不支持垂直制表符的特性搞出来的。

var ie = !+"\v1";

仅仅需要7bytes!参见这篇文章,《32 bytes, ehr ... 9, ehr ... 7!!! to know if your browser is IE》,讲述外国人是如何把IE的判定从32 bytes一步步缩简成7 bytes!的故事

但这纪录今年1月8日被一个俄国人打破了,现在只要6 bytes!它利用了IE与标准浏览器在处理数组的toString方法的差异做成的。对于标准游览器,如果数组里面最后一个字符为逗号,JS引擎会自动剔除它。详见这里 恭喜你,Aleko ,你真是我的偶像!

var ie = !-[1,];
var ie = !-[1,]; 
   alert(ie); 

 

如果从非IE的角度判定,可以省一个比特,因为我们做兼容时,绝大多数情况都是IE与非IE地开工。

var notIE = -[1,];

 

if(-[1,]){
     alert("这不是IE浏览器!");
}else{
     alert("这是IE浏览器!");
}

 

 

 

原文:http://www.cnblogs.com/rubylouvre/archive/2010/01/28/1658006.html

分享到:
评论
34 楼 夜之son 2010-05-03  
在利用js时,还很少用到浏览器判断,用的时候也是一些基本的判断方法。就是ajax中用到的,楼主这种方法第一次见,没验证,先收起来。
33 楼 hax 2010-05-02  
应该试验一下opera。

我记得是有非ie浏览器也模仿了ie的这个行为的。
32 楼 spllot 2010-05-02  
试了三个浏览器,结果如下

FF:这不是IE浏览器
IE:这是IE浏览器
搜狗:这是IE浏览器
31 楼 fight_bird 2010-05-01  
苦中作乐的悲剧,微软该死,呵呵。
30 楼 fangin 2010-04-30  
追求完美的程序员有2种,
一种追求代码短,快,
一种是追求代码最官方最大众,
我属于后者,自己写完代码实现功能以后要是发现api里的demo跟我写的不一样我就难受,想着法子向demo靠拢。。。这也算是没追求吧,不求有功,但求无过,万一我自创的方法有隐藏问题我不知道呢,跟着官方走总没错
29 楼 snailq 2010-04-30  
jfxia 写道
果然强悍!

再看看以前用的代码 var ie = !!(window.attachEvent && !window.opera);
相形之下,真是不堪入目呐。





很佩服外国人的专业精神。
但是大家觉得这样代码var ie = !-[1,]; 的可读性好吗?呵呵
我到不觉得。
我突然想起《苹果往事:开发麦金托什的非凡岁月》上的一篇文章:我们不是黑客!
当时macintosh的ROM非常小,开发人员就想尽办法压缩代码,但Bill Atkinson却
非常反对,因为从长远看这不利于软件的维护,或产生不可预知的错误。
28 楼 yangguo 2010-04-30  
又倒退到c语言玩技巧废可读性的时代,居然还有这么多人追捧。
27 楼 BruceXX 2010-04-30  
蛋疼了,这人。。
26 楼 xingqiliudehuanghun 2010-04-30  
蛋疼,有几个人能看得懂?就省那几个byte,代码变得晦涩难懂
25 楼 nearboy 2010-04-30  
<div class="quote_title">helin 写道</div>
<div class="quote_div">
<h2 style="text-align: left;">               </h2>
<h2 style="text-align: left;">
<a id="ctl04_TitleUrl" href="http://www.cnblogs.com/rubylouvre/archive/2010/01/28/1658006.html">全世界最短的IE判定</a> </h2>
<p>以前最短的IE判定借助于IE不支持垂直制表符的特性搞出来的。</p>
<div id="highlighter_502965" class="syntaxhighlighter nogutter  jscript">
<div class="lines">
<div class="line alt1">
<table border="0"><tbody><tr>
<td class="content">
<code class="jscript keyword"><strong><span style="color: #006699;">var</span></strong></code> <code class="jscript plain">ie = !+</code><code class="jscript string"><span style="color: #0000ff;">"\v1"</span></code><code class="jscript plain">;</code> </td>
</tr></tbody></table>
</div>
</div>
</div>
<p>仅仅需要7bytes!参见这篇文章,<a href="http://webreflection.blogspot.com/2009/01/32-bytes-to-know-if-your-browser-is-ie.html">《32 bytes, ehr ... 9, ehr ... 7!!! to know if your browser is IE》</a>,讲述外国人是如何把IE的判定从32 bytes一步步缩简成7 bytes!的故事</p>
<p>但这纪录今年1月8日被一个俄国人打破了,现在只要6 bytes!它利用了IE与标准浏览器在处理数组的toString方法的差异做成的。对于标准游览器,如果数组里面最后一个字符为逗号,JS引擎会自动剔除它。详见<a href="https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Literals#Array_Literals">这里</a> 恭喜你,Aleko ,你真是我的偶像!</p>
<div id="highlighter_351857" class="syntaxhighlighter nogutter  jscript">
<div class="lines">
<div class="line alt1">
<table border="0"><tbody><tr>
<td class="content">
<code class="jscript keyword"><strong><span style="color: #006699;">var</span></strong></code> <code class="jscript plain">ie = !-[1,];</code> </td>
</tr></tbody></table>
</div>
</div>
</div>
<pre name="code" class="js">var ie = !-[1,];
   alert(ie); </pre>
<p> </p>
<p>如果从非IE的角度判定,可以省一个比特,因为我们做兼容时,绝大多数情况都是IE与非IE地开工。</p>
<div id="highlighter_868981" class="syntaxhighlighter nogutter  jscript">
<div class="lines">
<div class="line alt1">
<table border="0"><tbody><tr>
<td class="content">
<code class="jscript keyword"><strong><span style="color: #006699;">var</span></strong></code> <code class="jscript plain">notIE = -[1,];</code> </td>
</tr></tbody></table>
</div>
</div>
</div>
<p> </p>
<pre name="code" class="js">if(-[1,]){
     alert("这不是IE浏览器!");
}else{
     alert("这是IE浏览器!");
}
</pre>
<p> </p>
</div>
<p>准确点说,它是判读是不是使用Trident内核的浏览器:IE、Maxthon、TT、The World、360SE等,而非IE浏览器!</p>
<p>随便提一句</p>
<p><span style="color: #800000;">使用Gecko内核的浏览器:Netcape6及以上版本、FireFox、MozillaSuite/SeaMonkey;</span></p>
<p><span style="color: #800000;">使用Presto内核的浏览器:Opera7及以上版本;</span></p>
<p><span style="color: #800000;">使用Webkit内核的浏览器:Safari、Chrome。</span></p>
<p> </p>
<p>给你推荐篇文章:<a href="/blog/498523"><span style="color: #108ac6;">浏览器内核简介</span></a></p>
24 楼 rplees 2010-04-30  
经典,不得不服发现这个写法的人。
23 楼 xxjglobal 2010-04-30  
很好 很强大
22 楼 lihuachuan 2010-04-29  
太牛叉了吧
21 楼 xiaotiaotiao 2010-04-29  
有没有试过ie9?

20 楼 liuhu2967 2010-04-29  
这个-是代表什么意思呢
19 楼 jundy 2010-04-29  
我也觉得有可能会被修正了
18 楼 caiceclb 2010-04-29  
need mark one xia
17 楼 淹不死の鱼 2010-04-29  
这种差异会不会被MS一个补丁就修正了?
16 楼 liwanfeng 2010-04-29  
神人!佩服……
15 楼 greatghoul 2010-04-29  
这种方法挺变态呀。这么短小精悍。

相关推荐

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

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

    基于AT89S52 单片的频率计

    Keil c51 软件提供丰富的库函数和功能强大的集成开发调试工具,全 Windows 界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体 会到keil c51 生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑...

    Java设计定制】考勤流程优化 - 论文、源码、PPT全套.zip

    高质量大全套,这是我用过的,改改名字直接那去用就好了

    TypeError Contract inherits from multiple base contracts with conflicting functions - 继承冲突(解决办法).md

    TypeError Contract inherits from multiple base contracts with conflicting functions - 继承冲突(解决办法).md

    mysql-connector-java-5.1.42.jar

    该资源为mysql-connector-java-5.1.42.jar,欢迎下载使用哦!

    内置式永磁电机(IPM)电磁与机械耦合分析及磁桥设计优化

    内容概要:本文深入探讨了内置式永磁电机(IPM)中磁桥设计面临的挑战及其解决方案。磁桥作为连接磁体和转子铁芯的关键部分,其厚度直接影响电机的电磁特性和机械强度。文中详细介绍了利用COMSOL软件进行电磁和机械耦合分析的方法,包括设置非线性材料属性、计算离心力以及处理磁体与铁芯间的接触问题。同时,讨论了磁致伸缩效应对系统的影响,并提出了通过参数化扫描优化磁桥厚度的技术路径。最终得出结论,最佳磁桥厚度应在0.5-1.2mm范围内,具体取决于冷却方式和材料选择。 适合人群:从事电机设计、电磁兼容性研究及相关领域的工程师和技术人员。 使用场景及目标:适用于希望深入了解IPM电机内部工作机制的研究人员,尤其是关注如何平衡电磁性能与机械强度的设计者。目标是在确保高效运行的同时提高设备的安全性和可靠性。 其他说明:文章强调了理论模型与实际应用相结合的重要性,指出即使是最优设计方案也需要考虑制造公差和长期使用的耐久性。此外,还提到了一些实用技巧,如采用不同导磁率材料来改善局部应力分布。

    Postgres Checkpointer 实战:优化数据持久化性能的策略

    Postgres Checkpointer 实战:优化数据持久化性能的策略 https://blog.csdn.net/weixin_47560078/article/details/148338420

    ### 2024年印尼税收袖珍指南-普华永道版

    内容概要:《2024年印尼税收袖珍指南》由普华永道发布,涵盖了印尼税收体系的关键方面。主要内容包括企业所得税、个人所得税、预提税、国际税收协定、增值税、奢侈品销售税、碳税、关税与消费税、税收优惠、地方税、印花税、税务会计、税务稽查与评估、强制执行征税、税务纠纷与处理等。企业所得税税率一般为22%,特定条件可享受优惠。个人所得税采用超额累进税率,最高达35%。预提税涵盖多种收入类型,如工资、利息、股息等。国际税收协定帮助避免双重征税,提供优惠税率。增值税标准税率为11%,部分商品和服务免征。税收优惠包括免税期、加计扣除等,尤其针对特定行业和地区。地方税种类繁多,如土地与建筑物税、机动车税等。税务稽查与评估确保纳税人合规,税务纠纷可通过异议、申诉、诉讼等方式解决。 适用人群:企业财务人员、税务顾问、跨国公司税务部门、个人纳税人等。 使用场景及目标:①帮助企业理解和遵守印尼税法,优化税务规划;②协助个人纳税人正确申报各类税项;③为税务顾问提供最新税收政策信息,提升专业服务水平;④为跨国公司处理跨境税务问题提供指导。 阅读建议:此指南内容详尽,建议读者根据自身需求重点阅读相关章节,结合实际案例深入理解各项规定,并关注最新政策动态,确保税务处理合法合规。

    使用Vditor将Markdown文档渲染成网页(Vite+JS+Vditor)

    详细介绍了通过Vditor将Markdown格式文档渲染成Web网页的具体实现,并且实现了Markdown格式不具备的图片格式居中以及图片源更换的功能。

    多智能体系统分布式自适应一致性控制技术及其Matlab实现

    内容概要:本文详细介绍了多智能体系统中分布式自适应一致性控制技术,涵盖线性和非线性动力学系统。文中探讨了纯一致性控制和leader-follower一致性控制两种主要研究方向,提出了一种基于自适应调节相邻智能体间耦合权值的分布式相对状态一致性协议。该协议能够在所有无向连通通信图上实现一致性,并且可以在没有全局信息的情况下完全分布式地执行。文章还提供了相应的Matlab复现代码,帮助读者理解和验证所提协议的有效性。 适合人群:从事自动化控制、人工智能领域的研究人员和技术人员,尤其是对多智能体系统感兴趣的专业人士。 使用场景及目标:①深入理解多智能体系统中分布式一致性控制的基本原理和实现方法;②掌握纯一致性控制和leader-follower一致性控制的设计思路;③通过Matlab代码实现实验验证,提升实际应用能力。 其他说明:本文不仅提供了理论分析,还包括详细的代码实现,有助于读者从理论到实践全面掌握该技术。未来研究将继续探索更复杂的动力学行为和通信图结构下的分布式一致性控制问题,并拓展其在无人驾驶、机器人编队等领域的应用。

    Test failed Assertion error(解决方案).md

    Test failed Assertion error(解决方案).md

    实训商业源码-智能设备-毕业设计.zip

    实训商业源码-智能设备-毕业设计.zip

    基于SVPWM原理的T型逆变器仿真研究:深入理解与实际应用指南

    内容概要:本文档详细介绍了基于空间矢量脉宽调制(SVPWM)原理的T型三相逆变器仿真实现方法。主要内容涵盖扇区判断、作用时间计算及时区切换等关键步骤,并提供了完整的仿真文件、详细说明文档及相关参考文献。文中不仅展示了具体的MATLAB和C++代码片段,还分享了作者在实际调试过程中遇到的问题及解决方案,如电压矢量落于扇区分界线时的边界容错处理、过调制情况下的饱和函数应用以及中点电位平衡问题等。最终仿真结果显示,在母线电压600V条件下,输出线电压THD低于3%,显著优于传统SPWM方法。 适合人群:电气工程专业学生、电力电子工程师及对SVPWM技术感兴趣的科研人员。 使用场景及目标:① 学习并掌握SVPWM的基本原理及其在T型逆变器中的具体应用;② 掌握从理论到实践的完整流程,包括仿真建模、代码实现及调试技巧;③ 提升解决实际工程问题的能力,如处理非线性因素带来的挑战。 其他说明:本文档强调理论与实践相结合,提供丰富的实战经验和实用技巧,帮助读者更好地理解和应用SVPWM技术。

    2006-2025 国内宏观经济数据集(21项)CSV

    该数据集记录了国内生产总值(GDP)的相关数据,数据覆盖时间从2006年1月起至今,数据按月度进行统计。 包含:居民消费价格指数CP1、国内生产总值 GDP、制造业采购经理指数 PMI、消费者信心指数、业品出厂价格指数 PP1、海关进出口增减情况 HGJCK、财政收入 czsr、社会消费品零售总额、全社会用电分类情况表、社会融资规模增量统计、LPR品种数据、年度外汇储备数据、M2货币供应年率、外汇贷款数据、大宗商品价格、本外币存款、存款准备金率、央行货币当局资产负债、货币供应量、央行黄金和外汇储备、中国GDP年率。

    MATLAB环境下8-PSK调制解调及多普勒频移同步算法仿真研究 数字通信 高级版

    内容概要:本文详细介绍了基于MATLAB的8-PSK(八相移键控)调制解调及其在存在多普勒频移情况下的同步算法仿真实现。首先解释了8-PSK的基本概念,包括其星座图特点以及在移动环境中由于多普勒效应引起的频偏问题。接着给出了完整的MATLAB代码来完成整个流程,从生成随机符号序列开始,经过调制、加入多普勒频移和噪声干扰,再到接收端进行下变频、匹配滤波、频偏估计与补偿,最终通过星座图、眼图和频谱对比展示了同步算法的效果。文中还特别强调了一些容易忽视的技术细节,比如pskmod函数的相位偏移设置、根升余弦滤波器的选择、频偏估计方法的选择等。 适合人群:对数字通信理论有一定了解并希望深入理解8-PSK调制解调机制及其同步算法的研究人员和技术爱好者。 使用场景及目标:适用于想要利用MATLAB工具探索8-PSK调制特性的人士,在无线通信领域特别是涉及高速移动环境下的信号传输研究中有重要应用价值。目的是帮助读者掌握8-PSK调制解调的具体实现步骤,同时学会如何应对由多普勒频移带来的挑战。 其他说明:文中提供的MATLAB代码可以直接用于实验验证,同时也为后续进一步优化提供了很好的起点。对于初学者来说,可以作为学习数字通信系统的基础教程;而对于有经验的研发人员,则能从中获得关于频偏补偿的新思路。

    Comsol仿真技术在PEM燃料电池堆热管理中的应用与建模实践 Comsol v1.0

    内容概要:本文详细介绍了利用Comsol仿真软件对聚合物电解质膜(PEM)燃料电池堆进行热管理建模的方法和技术。文中强调了保持电池单元间温度一致性的必要性,探讨了模型的具体构成,包括温度、电位、物质传递和流体流动的模拟。此外,还展示了Comsol大神们如何通过精确的数学模型和算法解决复杂物理问题,从而优化燃料电池堆的整体性能。 适合人群:从事燃料电池研究的科研人员、工程师及相关领域的学生。 使用场景及目标:适用于希望深入了解燃料电池堆内部工作机理及其热管理系统的人群,旨在提高燃料电池的设计效率和运行可靠性。 其他说明:随着清洁能源技术的发展,Comsol等专业仿真工具的应用将有助于推动燃料电池技术的进步,在未来的能源科技研究中扮演重要角色。

    基于Comsol的飞秒多脉冲激光烧蚀材料仿真:双温模型与PDE固体传热模型的应用

    内容概要:本文详细介绍了利用Comsol进行飞秒多脉冲激光烧蚀材料仿真的方法。首先,通过建立双温模型(电子温度和晶格温度)来模拟材料内部的能量传递过程,采用PDE模块和固体传热模型相结合的方式,实现了温度场和应力场的精确仿真。文中还提供了具体的数学表达式和建模步骤,如激光热源项的高斯型表达式以及双温方程的具体形式。此外,文章探讨了脉冲堆积效应对温度和应力的影响,并展示了如何通过后处理代码提取关键参数的数据,以便更好地理解和优化激光烧蚀效果。 适合人群:从事微加工领域的研究人员和技术人员,尤其是对激光烧蚀材料仿真感兴趣的科学家和工程师。 使用场景及目标:适用于需要精确模拟飞秒激光烧蚀材料过程中温度场和应力场变化的研究项目。主要目标是帮助用户理解双温模型的工作机制,掌握Comsol软件的操作技巧,从而优化激光加工工艺,提高加工质量和效率。 其他说明:文章强调了激光重复频率和脉冲能量之间的平衡关系,指出过高的频率可能导致热影响区面积增大,进而影响加工质量。因此,在实际应用中需要综合考虑多个因素,确保最佳的加工效果。

    TypeError Contract inherits from multiple base contracts with conflicting functions解决办法.md

    TypeError Contract inherits from multiple base contracts with conflicting functions解决办法.md

    实训商业源码-渔具产品网站源码-毕业设计.zip

    实训商业源码-渔具产品网站源码-毕业设计.zip

    Java设计服务】简易考勤系统:提供论文、源码及PPT.zip

    高质量大全套,这是我用过的,改改名字直接那去用就好了

Global site tag (gtag.js) - Google Analytics