jquery版本區別:javascript
1.3通常功可以css
1.4.2通常功可以並且穩定html
1.7+比較新特性前端
2不支持老IEjava
兼容的話最好選 1.x。穩定性就用1.7或者1.4,其中1.4的體積相對小jquery
另外更加狀況選用1系列仍是2系列,2系列不支持ie6,7,8git
經常使用1.4和1.7:github
二者可擴展性、兼容性分析: ajax
因爲 Jquery 的版本都是不向後兼容的,致使了基於 jquery 開發的插件兼容性有問題,當新版本的 jquery 推出後,若是開發想升級的話,
要看插件是否支持。一般狀況下,在最新版 jquery 版本下,現有插件可能沒法正常使用。開發者使用的插件越多,這種狀況出現機率越高。api
同時,因爲 jquery1.4.2 版本發佈時間比較早,基於這版本開發的插件數量龐大,而對應版本的開發社區至關活躍,不少詭異的問題,
網上都有對應的解決方案。
從可擴展性來分析吧,不管是 1.7.1 仍是 1.4.2 留給開發擴展的方法只有兩個,分別是 jquery.extend 和 jquery.fn.extend ,
一種是添加靜態屬性和方法、一種是對象添加屬性和方法,擴展方式比較簡單,經歷了多個版本,擴展方式都一致,所以在擴展性上面沒什麼可比較的。
綜合來講, jquery1.7.1 的版本在多數瀏覽器上的性能表現無疑比 jquery1.4.2 更好,而穩定性和兼容性方面 jquery1.4.2 更出色點,
其它地方基本沒什麼差距。
從目前前端開發狀況來講吧,引用到第三方的擴展庫相對來講比較少,咱們更多的關注框架性能是否優越,可擴展性是否良好,所以, jquery1.7.1 的版本是當前最好的選擇。
既然jQuery 2.x不支持老舊瀏覽器,那麼爲何要開發這個版本?
要說明的是,這個版本主要是用於目前一些比較高級的JS環境,也便是版本比較新的瀏覽器。這些JS和老舊IE沒有多大關係,而jQuery 1.x中有大部分代碼是
對老舊瀏覽器作的兼容,這個就增長了運行的負擔,影響了運行效率。
jquery3.0 新特性:
新的最終版最主要的目標是更加快速,更加時尚,所以,那些支持早於IE9版本的相關技術與工做區都被移除了。這意味着若是你想要或者須要支持IE6-8,你必須用回1.12版本,由於甚至是2.X版本都沒法完整支持早於IE9的瀏覽器。
大多數支持jQuery 3的瀏覽器都支持strict mode,而在本次更新中對此進行了規定。
雖然jQuery 3是寫在strict mode中的,可是你須要瞭解的是你的代碼並不須要運行在strict mode中,所以若是你想要把之前的代碼遷移到jQuery 3,你不須要對已存在的jQuery代碼進行重寫。Strict和non-strict mode的JavaScript代碼能夠和諧共存。
這裏有一些例外:某些版本的ASP.NET,由於strict mode的緣故,沒法與jQuery 3兼容,若是你的代碼涉及到了ASP.NET,你能夠查看關於strict mode的細節。
jQuery 3支持for...of語句,這是由ECMAScript 6中新引進的一種for循環語句。這提供了對Arrays,Maps和Sets這樣的可迭代對象一種更直接的遍歷方法。
在jQuery中,for...of循環能夠取代之前的$.each(...)語法,而且更容易經過jQuery的元素集合進行循環。
jQuery 3使用requestAnimationFrame() API來執行動畫,使動畫運行得更加順暢、快速。新的API只用於支持它的瀏覽器,對於那些更老的瀏覽器(如IE9)jQuery使用先前的API來做爲顯示動畫的後備方案。
RequestAnimationFrame已經推出一段時間了,若是你對如何使用它以及何時使用它感興趣,CSS Tricks上有一篇很好的文章可供你閱讀。
新的jQuery.escapeSelector()提供了對在CSS中存在特殊含義的字符串或字符進行轉義的方法,該方法可以使這些字符串或字符可以繼續用於jQuery選擇器中,而無需對那些沒法進行正確理解的JavaScript解釋器進行轉義。
這個示例可讓你更好的瞭解這個全新的方法:
舉個例子,頁面中某個ID爲「abc.def」的元素因爲選擇器將其解析爲ID爲「abc」且包含一個名爲「def」的類的對象,而沒法被$( "#abc.def" )選定。可是它能夠由 $( "#" + $.escapeSelector( "abc.def" ) )來進行選定。
我沒法肯定發生中狀況的頻率,可是假如你碰到過這種相似的狀況,這無疑給了你一個解決該問題的簡單方法。
不幸的是,jQuery 3如今還沒法完整的支持SVG,可是對於操做CSS類名稱的jQuery方法,如.addClass()和.hasClass()如今能夠將SVG文檔做爲目標。這意味着你能夠修改(添加、刪除、切換)或者查找SVG(可縮放矢量圖形)下的jQuery類,而後使用CSS的類樣式。(相關閱讀:Styling Scalable Vector Graphic (SVG) with CSS)
JavaScript Promises,用於異步計算的對象,如今在ECMAScript 6中已經被標準化;它們的運行情況和特性的詳細說明參見Promises/A+標準。
在jQuery 3中,延遲對象已經與新的Promises/A+標準相兼容,延遲對象已經成爲讓建立回調隊列成爲可能的可鏈對象(chainable objects)。
新的特性改變了異步回調函數執行過程,Promises容許開發者編寫在邏輯上與同步代碼更接近的異步代碼。
查看升級指南的代碼示例,或者查看關於JavaScript Promises基礎的Scotch.io教程可讓你瞭解更多的信息。
$.when()提供了執行回調函數的一種方法,它成爲了jQuery 1.5以後的一部分。這個方法很是靈活,它適用於零參數,也適用於一個或者多個做爲參數的對象。
jQuery 3改變了當包含$.then()方法時對$.when()中參數的解讀方法,你能夠對$.when()進行額外的參數回調。
在jQuery 3中,若是你在$.when()中的then()方法內增長一個輸入參數,該參數將會被解釋成一個可與Promise兼容的"thenable"。
這意味着 $.when方法可以接收更加寬廣的輸入範圍,好比原生的ES6 Promises和Bluebird Promises,這也使得編寫更復雜的異步回調成爲了可能。
爲了增長響應式設計的兼容性,與元素顯示和隱藏的代碼在jQuery 3中進行了更新。
從如今開始,.show()、.hide()和.toggle()方法將會之內聯樣式爲重點取代之前的計算樣式,這種方式可以更尊重樣式列表的改變。
新的代碼儘量的尊重樣式列表中所呈現的數值,這意味着CSS規則可根據事件(如設備從新定位和窗口尺寸調整)進行動態改變。
這個說明文件申明瞭最重要的結果就是:
「做爲結果,斷開鏈接的元素除非指定了內聯display: none,不然將再也不認定爲是隱藏的。所以,在jQuery 3.0中,.toggle()再也不對斷開鏈接元素與已鏈接元素進行區分。」
若是你想要更好的瞭解關於全新的顯示/隱藏邏輯,這個Github discussion會對你有幫助。jQuery開發者還發布了Google文檔表來展現在不一樣用例下新規則的運轉。
jQuery 3增長一個額外的安全層用戶用於防備跨站點腳本(XSS)攻擊,它須要開發者指定$.ajax()和$.get()方法中的選項爲dataType: "script"。
換言之,若是你想要執行跨站點的腳本請求,你必須在這些方法中做出這樣的聲明。
新的改變對於當「遠程站點傳遞非腳本內容以後又提供有惡意腳本的服務內容」的狀況是很是有效的。這個變化不會影響$.getScript()方法,由於它明確地設置了dataType: "script"選項。