摘要:JQuery 3.0終於來了。自從2014年10月開始,web開發人員社區就一直在等待這次重大更新。2016年6月,在千呼萬盼之中,它終於來到了我們面前。
JQuery 3.0終於來了。自從2014年10月開始,web開發人員社區就一直在等待這次重大更新。2016年6月,在千呼萬盼之中,它終於來到了我們面前。
jQuery 3.0的版本說明中表示,這是一個更輕巧、速度更快的jQuery,而且保持着向后兼容的特性。在這篇文章中,我們將會窺探一下jQuery 3.0的一些新特性,了解一下它給JavaScript世界帶來的變化。
何處下載
如果你想下載jQuery 3.0進行嘗試,請直接前往下載頁面。另外,它的升級指南和源代碼也值得你去看一下。
如果你想要測試項目在 jQuery 3.0中的工作方式,你可以通過 jQuery遷移插件來識別代碼的兼容性。
這篇文章並沒有覆蓋jQuery 3.0的所有新功能,只介紹了那些有意思的內容:更好的代碼質量、新ECMAScript 6的整合功能、新的動畫API、用來轉義字符串的新方法,更強的SVG支持、經過改進的Async Callback、對響應式網頁更好的兼容以及更高的安全性。
1、移除了舊的IE工作區
新版本最主要的目標之一,就是要變得更加快速和輕巧,因此此前版本中有關早於IE9瀏覽器的技術和工作區都被移除了。這意味着,如果你想要繼續為IE6-8版本的瀏覽器提供支持,你就必須繼續使用1.12版本,因為即使是2.X版本的jQuery也無法完整支持遭遇IE9版本的瀏覽器。你可以在jQuery 3.0的說明文檔中查看瀏覽器的支持情況。
2、jQuery 3.0可以在Strict Mode中運行
jQuery 3所支持的大部分瀏覽器都支持strict mode,本次發布的新版本對這個規則進行了具體的規定。雖然jQuery 3是在strict mode中編寫的,但是你需要知道,你所編寫的代碼不一定非要在strict mode中運行。因此,如果你想把以前的代碼轉移到jQuery 3中,你無需對代碼進行重寫。strict和non-strict模式的JavaScript可以彼此共存。
只有一個例外:某些版本的ASP.NET,由於strict mode的原因,無法兼容jQuery 3。如果你的代碼涉及到了ASP.NET,你可以在這里查看詳情。
3、引進For...of循環
jQuery 3現在支持For...of語句,這是ECMAScript 6新引進的一種for循環語句。它給Arrays、Maps和Sets等可迭代對象提供了一種更加簡單直接的遍歷方法。
在jQuery中,For...of循環可以替代早前的$.each(…)語法,並且讓jQuery的元素集合循環變得更容易。
注意:for...of只能在支持ECMAScript 6的環境下或者使用Babel這樣的JavaScript編譯器下工作。
4、采用了新的動畫API
jQuery 3使用了requestAnimationFranme() API來執行動畫,讓動畫的播放更加順暢、速度更快。新的動畫只能用在對其支持的瀏覽器中;一些老版本的瀏覽器(例如IE9),jQuery會使用以前的API作為動畫顯示的后備方法。
RequestAnimationFrame已經推出一段時間了,如果你對如何使用它,獲知什么時候可以使用它感興趣,CSS Tricks上有一篇很好的文章可供你閱讀。
5、包含特殊含義的字符串迎來了新的轉義方法
新的jQuery.escapeSelector()方法,可以讓你對在CSS中具有其他含義的字符串或是字符以一種全新的方式進行轉義,從而讓其在jQuery選擇器中繼續可用,而無需對那些無法進行正確理解的JavaScript解釋器進行轉義。
下面這個例子可以幫助我們更好的理解這種方式:
假設頁面中有某個對象,其ID為abc.def,由於選擇器將其解析為“擁有abc ID,且包含一個名為def的類的對象”,從而無法被$( "#abc.def" )所選定。然而,它可以由 $( "#" + $.escapeSelector( "abc.def" ) )來進行選定。
我不確定類似的情況會多長時間發生一次,但是如果你的確遇到了這樣的問題,你現在擁有了一個輕松的解決方式。
6、類操作方法支持SVG
可惜的是,jQuery現在還無法完全支持SVG,但是jQuery但是對於操作CSS類名稱的jQuery方法,如addClass()和.hasClass()現在可以將SVG文檔作為目標。這意味着,你可以修改(添加、移除、切換),或是尋找SVG下的jQuery類,然后使用CSS的樣式。
7、延遲對象現在可以兼容JS Promises
JavaScript Promises是用於異步計算的對象,它在ECMAScript 6中已經完成了標准化;它們的行為和特性詳細說明請參看 Promises/A+標准。
在jQuery 3中,延遲對象可與新的Promises/A+標准兼容。延遲對象成為了可鏈對象,讓創建回調隊列成為可能。
這個心特性改變了異步回調函數的執行方式。Promises讓開發人員可以編寫在邏輯上與同步代碼更接近的異步代碼。
8、jQuery.when()對於多種參數的不同解讀
$.when()方法為回調函數的執行提供了一種方法。從1.5版本中,它就一直是jQuery的一部分。它是一種靈活的方法;它還使用與零參數,也適用於一個或者多個作為參數的對象。
jQuery 3改變了當包含$.when()方法時對$.when()中參數的解讀方法,你可以對$.when()進行額外的參數回調。
在 jQuery 3中,如果你使用then()方法在$.when()中添加一個輸入參數,這個參數將會被解釋為一個可兼容Promise的“thenable”。
這意味着$.when可以接受更寬更的輸入范圍,例如原生ES6 Promises和Bluebierd Promises,這讓編寫更復雜的異步回調成為了可能。
9、新的顯示/隱藏邏輯
為了加強與響應式設計的兼容性, jQuery 3.中與顯示和隱藏元素有關的代碼也獲得了升級。從現在開始,.show()、.hide()和.toggle()方法將會專注於內聯樣式,以取代之前的計算樣式,這種方法更加尊重樣式列表的改變。
這個新的代碼可以在任何可能的時候尊重樣式列表中所顯示的數值,這意味着,CSS規則可以根據事件,例如設備重定位和窗口尺寸的調整,來進行動態改變。
10、為防止XSS攻擊提供額外的保護
jQuery 3針對XSS攻擊添加了額外的保護層,它需要開發人員指定$.ajax()和$.get()方法中的選項為dataType: “sricpt”。
換句話說,如果你想要執行跨站點的腳本請求,你必須在這些方法中做出這種說明。
文本顯示,當“遠程站點傳遞非腳本內容之后又提供有惡意腳本的服務內容”時,這種方法非常有效。這種改變不會影響$.getScript()方法,因為它明確地設置了dataType: “script"選項。
來源:SDK.cn
鏈接:https://www.sdk.cn/news/4101
原文:http://www.hongkiat.com/blog/jquery-3-new-features/