首页 > 教育学习 > 为什么 > 现在写 JavaScript 还要考虑对不同浏览器的支持吗?

现在写 JavaScript 还要考虑对不同浏览器的支持吗?
2012-01-19 17:49:00   来源:   点击:

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

    9 个答案

    • 答案 1:

      首先,要假設這裡提到的是純 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 在新特性上做了很多實驗而這些實驗其實是可以視為是超出標準的。一般錯誤的實現是有在減少。[1]kangax.github.com/es5-comp...[2]wiki.ecmascript.org/doku...[3]sputnik.googlelabs.com/compare[4]lists.w3.org/Archives...[5]people.mozilla.org/~jorendo...
    • 答案 2:

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

      这个问题问的过早,现在对于书写js最大的问题恰恰就是兼容。不要说不同的浏览器,即使是同一个浏览器,在不同的版本就会有兼容问题。同一个核心的不同浏览器也有兼容问题。
    • 答案 4:

      悲观的说,这应该只是个梦....现在主流浏览器对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)参考 en.wikipedia.org/wiki...
    • 答案 5:

      需要注意是肯定的,但并没有多恐怖。现在的js库(如mootools, jquery)在很大程度上解决了这个问题。一般在firefox或chrome下开发完成后,稍微去ie里测一下就行。想想遇到最多的兼容性问题大约是json末尾的逗号忘了删。。。
    • 答案 6:

      现实就是个噩梦!可能永远都要考虑吧,浏览器多了必然有问题,浏览器也在不断升级,新功能、特性不断出现,标准也在不断的完善。不过兼容性问题可以让jquery/mootools等类库解决。
    • 答案 7:

      1,要。2,很大。3,是。
    • 答案 8:

      跟css一样要考虑不同浏览器不同版本之间的兼容性,JavaScript的兼容性也是一个令人头疼的事情。
    • 答案 9:

      手持设备上很多JS的鼠标效果是无法实现的。网页简单就好。

相关热词搜索:

上一篇:把一个不合格的人招入一个团队,带来的后果是什么?
下一篇:有没有可以清除歌曲中的人的声音而留下背景音乐的软件或网站?