>> 欢迎访问easn的博客:一个伪技术宅,关注互联网发展,研究用户体验。赚钱给老婆买我的百分之一女装

easn随笔录

记录easn的学习历程以及生活琐碎。

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

或者说,对于 IE6 以上,FF3.5 以上等浏览器,对JavaScript的支持还有多大的差异?它们的发展趋势是不是逐渐符合 ECMA 的 ECMAScript 标准

JavaScript语言本事的目前在主流浏览器中不存在兼容性问题(当然es3与es5间是有差异的),兼容性问题主要在与JavaScript操作DOM和BOM部分,但这部分的兼容性问题jQuery已经做的相当完善了,如果使用JQuery通常也无效考虑太多JavaScript方面兼容性问题。

首先,要假设这裡提到的是纯 JS,如果连 DOM 一起考虑会非常複杂。

大家应该了解浏览器差异不同的原因有不同的种类,避免问出难以回答的问题、了解标准的极限并不对标准有不实际的幻想。这裡将浏览器 JS 实作差异种类分为三种:新特性、错误的实现、规范未定义造成的歧异。

新特性:很多兼容性的问题仅仅是有些新特性有无实现的问题。在讨论 ECMAScript 兼容性时候,必须先釐清 ECMAScript 的版本,现在最新的 ECMAScript 版本是 5。

ECMAScript 5 新特性的实现情形,可以参考[1]的表格,可以注意到在 IE6、FF3.5 以上还是有不一样的实现情形。超过 ECMAScript 5 的新特性的兼容更是无法避免,FF 有很多这种实验性的特性,例如说 var {name, age}  = person; (这叫 destructuring assignment[2],等同于 var name = person.name; var age = person.age; )

也就是必须了解很多时候实现走在标准前面,而标准制定是实现标准化的过程,所以在这个过程中实现不一致是很一般的情形。

错误的实现:理论上浏览器应先修复既有的实现才实现新特性,但是很多既有实现的错误仅发生在非常极端的情况下,因此考量到成本跟利益的情形有时候浏览器会先选择实现新特性。

ECMAScript 的上一个版本是第三版,其兼容性可以参考[3],各浏览器通过的测试比例分别是:Opera 10.50 - 98.5%、Safari 4 - 97.0%、Chrome 4 - 95.8%、FF 3.6 - 95.0%、IE8 - 91.2%(2010年3月当时的最新浏览器)。

规范未定义造成的歧异:有些 ECMAScript 特别指出的未定义行为造成的歧异。

举个例子来说,ECMAScript 5 没定义 Math.random() 的算法造成 WebKit 使用的位数较少[4]。其他例子可以从 ECMAScript 5 的规范[5]裡面搜寻 "implementation-dependent" 得到。

这种问题严格上不能责怪浏览器实现者,真要说的话应该算是规范不应该留下这些「未定义漏洞」,HTML5 规范裡面基本上没有这些「 未定义漏洞」。另一方面,留一些漏洞是留给浏览器实现者一些自由以优化代码等等。但以现在的观点来看,这些漏洞造成 Web 开发者的困扰更大。

== 结论 ==

现在写 JavaScript 还要考虑对不同浏览器的支持吗?

要。特别需要注意 IE 错误实现很多,当然目前看来 IE 10 在 ECMAScript 5 的错误是最少的,但是 IE 10 要广泛使用要等几年?可以参考 ECMAScript 5 的兼容表格[1]以决定要使用的 JS 特性。

对于 IE6 以上,FF3.5 以上等浏览器,对JavaScript的支持还有多大的差异?

新特性:很大。错误的实现:还可以。规范未定义造成的歧异:一般不会碰到但是要注意。

它们的发展趋势是不是逐渐符合 ECMA 的 ECMAScript 标准?

这个问题很难回答,因为 FF 在新特性上做了很多实验而这些实验其实是可以视为是超出标准的。一般错误的实现是有在减少。

悲观的说,这应该只是个梦....

现在主流浏览器对ECMAScript标准有各自的实现,为了各自的利益我相信不可能所有的浏览器会完完全全的按照标准实现......只可能是大部分的子集。

举个例子:

在2010年,Ecma international 做了一次关于各实现对Ecma 262 Ecmascript标准的测试。

Product   Current version    Test262 failed   Beta/Preview version  Test262 failed   Test suite version (date)

Internet Explorer  9.0          276/10872          10.0 Preview 1          3/10872         0.7.2 (2011-04-20)

Firefox        4.0.1               298/10872         Nightly (2011-05-03)   232/10872      0.7.2 (2011-04-20)

Chrome      11.0.969.60      521/10872         12.0.742.12 dev-m      486/10872     0.7.0 (2011-04-08)

Opera         11.10              3840/10872        0.7.0 (2011-04-08)

posted on 2011-08-05 15:36  easn  阅读(542)  评论(0)    收藏  举报