现在写 JavaScript 还要考虑对不同浏览器的支持吗?
2011-08-05 15:36
309 查看
或者说,对于 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)
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)
相关文章推荐
- document.all 在各浏览器中的支持不同--JavaScript
- 解决不同浏览器对css支持问题详解
- javascript学习之路--判断浏览器是否支持javascript解释型脚本语言。
- Javascript兼容性问题小结(容易导致浏览器不同,又不容易察觉的)
- RF1001: 各浏览器对 '@font-face' 规则支持的字体格式不同,IE 支持 EOT 字体,Firefox Safari Opera 支持 TrueType 等字体
- 客户端浏览器支持当前JavaScript脚本存在的介绍
- Javascript 找一组数字中的最大数的方法(附使用Math.max来检测浏览器支持哪个属性)
- 长连接的定义及其优缺点,以及在不同的浏览器中的支持情况
- JavaScript判断浏览器对CSS3属性是否支持的多种方法
- JavaScript事件流 HTML和CSS代码支持页面的外观,JavaScript代码支持页面的行为,而JavaScript与HTML之间的交互是通过事件实现的。事件,是文档或者浏览器窗口中发生
- javascript Array.sort() 跨浏览器下需要考虑的问题
- 不同浏览器基于javascript测试结果
- 判断访问者的浏览器是否支持JavaScript和Cookies
- 一段简单 javascript 的代码,用来验证日期的格式,支持闰年,支持 IE、Fixfox、Chrome 等主流浏览器
- IE 浏览器各个版本 JavaScript 支持情况一览表
- 用Javascript检测浏览器音频支持情况
- javascript 浏览器之间跳转传递参数(不支持中文字符)
- Javascript 找一组数字中的最大数的方法(附使用Math.max来检测浏览器支持哪个属性)
- 自制Javascript分页插件,支持AJAX加载和URL带参跳转两种初始化方式,可用于同一页面的多个分页和不同页面的调用
- 在不同浏览器中调试javaScript代码(二)